home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / CHEESEY.s < prev    next >
Encoding:
Text File  |  1980-05-20  |  190.5 KB  |  13,739 lines

  1.  
  2.  
  3.  
  4. CHEESEY equ 0
  5.  
  6. *************************************************
  7. * Stuff to do to get a C2P version:
  8. * Change copperlist
  9. * Change wall drawing
  10. * change floor drawing
  11. * change object drawing
  12. * change polygon drawing (ugh)
  13. * Write a palette generator program in AMOS
  14. * to provide a good 256 colour palette and
  15. * convert all graphics files specified
  16. * (possibly included in the game linker
  17. * program).
  18. * Possibly change the wall/floor/object
  19. * palettes to look nicer with more shades.
  20. * RE-implement stippling (if not present)
  21. * as it will look gorgeous now.
  22. *************************************************
  23.  
  24. ;MIDDLEX set 96
  25. ;RIGHTX set 191
  26. ;BOTTOMY set 160 
  27.  
  28. ;MIDDLEX set 96
  29. ;RIGHTX set 191
  30. ;BOTTOMY set 160
  31.  
  32. _break    macro
  33. ;    bkpt    \1
  34.     endm
  35.  
  36.  
  37. FILTER    macro
  38. ;    move.l    d0,-(sp)
  39. ;    move.l    #65000,d0
  40. ;.loop\@
  41. ;    bchg    #1,$bfe001
  42. ;    dbra    d0,.loop\@
  43. ;    move.l    (sp)+,d0
  44.     endm
  45.  
  46. BLACK    macro
  47.     move.w    #0,$dff180
  48.     endm
  49.  
  50. RED    macro
  51.     move.w    #$f00,$dff180
  52.     endm
  53.  
  54. FLASHER macro
  55. ;    movem.l    d1,-(sp)
  56. ;    move.w    #-1,d1
  57. ;
  58. ;loop3\@
  59. ;;    move.w    #\1,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    move.w    #\2,$dff180
  63. ;    nop
  64. ;    nop
  65. ;    dbra    d1,loop3\@
  66.  
  67. ;    movem.l    (sp)+,d1
  68.  
  69.     endm
  70.  
  71. GREEN    macro
  72.     move.w    #$0f0,$dff180
  73.     endm
  74.  
  75. BLUE    macro
  76.     move.w    #$f,$dff180
  77.     endm
  78.  
  79. DataCacheOff macro
  80.     movem.l    a0-a6/d0-d7,-(sp)
  81.     move.l    4.w,a6
  82.     moveq    #0,d0
  83.     move.l    #%0000000100000000,d1
  84.     jsr    _LVOCacheControl(a6)
  85.     movem.l    (sp)+,a0-a6/d0-d7
  86.     endm
  87.  
  88. DataCacheOn macro
  89.     movem.l    a0-a6/d0-d7,-(sp)
  90.     move.l    4.w,a6
  91.     moveq    #-1,d0
  92.     move.l    #%0000000100000000,d1
  93.     jsr    _LVOCacheControl(a6)
  94.     movem.l    (sp)+,a0-a6/d0-d7
  95.     endm
  96.  
  97.     opt    P=68020
  98.  
  99.     include utils:sysinc/hardware/intbits.i
  100.  
  101. CD32VER equ 0
  102.  
  103. maxscrdiv EQU 8
  104. max3ddiv EQU 5
  105. playerheight EQU 12*1024
  106. playercrouched EQU 8*1024
  107. scrheight EQU 80
  108.  
  109. ; k/j/m
  110.  
  111. ; 4/8
  112. ; s/x
  113. ; b/n
  114.  
  115. midoffset EQU 104*4*40
  116.  
  117.  
  118.  SECTION Scrn,CODE
  119. OpenLib       equ -552
  120. CloseLib      equ -414
  121.  
  122. INTREQ        equ    $09C
  123. INTENA        equ    $09A
  124. INTENAR    equ    $01C
  125. DMACON        equ    $096
  126.  
  127. SERPER        equ    $032
  128. SERDATR    equ    $018
  129. SERDAT        equ    $030
  130. vhposr        equ $006    
  131. vhposrl    equ $007 
  132.  
  133. bltcon0    equ $40 
  134. bltcon1    equ $42
  135. bltcpt        equ $48
  136. bltbpt        equ $4c
  137. bltapt        equ $50
  138. spr0ctl    equ $142
  139. spr1ctl    equ $14a
  140. spr2ctl    equ $152
  141. spr3ctl    equ $15a
  142. spr4ctl    equ $162
  143. spr5ctl    equ $16a
  144. spr6ctl    equ $172
  145. spr7ctl    equ $17a
  146. spr0pos    equ $140
  147. spr1pos    equ $148
  148. spr2pos    equ $150
  149. spr3pos    equ $158
  150. spr4pos    equ $160
  151. spr5pos    equ $168
  152. spr6pos    equ $170
  153. spr7pos    equ $178
  154. bltdpt         equ $54
  155. bltafwm    equ $44
  156. bltalwm    equ $46
  157. bltsize         equ $58
  158. bltcmod         equ $60
  159. bltbmod         equ $62
  160. bltamod         equ $64
  161. bltdmod         equ $66
  162. diwstart        equ $8e         ; Screen hardware registers.
  163. diwstop         equ $90
  164. ddfstart        equ $92
  165. ddfstop         equ $94
  166. bplcon0         equ $100
  167. bplcon1         equ $102
  168. col0            equ $180
  169. col1            equ $182
  170. col2        equ $184
  171. col3        equ $186
  172. col4        equ $188
  173. col5        equ $18a
  174. col6        equ $18c
  175. col7        equ $18e
  176. col8            equ $190
  177. col9            equ $192
  178. col10           equ $194
  179. col11           equ $196
  180. col12           equ $198
  181. col13           equ $19a
  182. dmacon        equ $96
  183. dmaconr        equ $002
  184. intenar        equ $01c
  185. intena        equ $09a
  186. intreq        equ $09c
  187. intreqr        equ $01e
  188. intreqrl    equ $01f
  189. bpl1pth         equ $e0
  190. bpl1ptl         equ $e2
  191. bpl2pth        equ $e4
  192. bpl2ptl        equ $e6
  193. bpl3pth        equ $e8
  194. bpl3ptl        equ $ea
  195. bpl4pth        equ $ec
  196. bpl4ptl        equ $ee
  197. bpl5pth        equ $f0
  198. bpl5ptl        equ $f2
  199. bpl6pth        equ $f4
  200. bpl6ptl        equ $f6
  201. bpl7pth        equ $f8
  202. bpl7ptl        equ $fa
  203. bpl8pth        equ $fc
  204. bpl8ptl        equ $fe
  205. spr0pth        equ $120
  206. spr0ptl        equ $122
  207. spr1pth        equ $124
  208. spr1ptl        equ $126
  209. spr2pth        equ $128
  210. spr2ptl        equ $12a
  211. spr3pth        equ $12c
  212. spr3ptl        equ $12e
  213. spr4pth        equ $130
  214. spr4ptl        equ $132
  215. spr5pth        equ $134
  216. spr5ptl        equ $136
  217. spr6pth        equ $138
  218. spr6ptl        equ $13a
  219. spr7pth        equ $13c
  220. spr7ptl        equ $13e
  221. adkcon        equ   $09E
  222.  
  223.  
  224. ; move.l #length,d0
  225. ; moveq.l #2,d1    ; chipmem
  226. ; move.l 4.w,a6
  227. ; jsr allocmem(a6) = -198
  228.  
  229. ; tst.l d0
  230. ; beq.s ohbugger
  231. ; move.l d0,memaddr
  232.  
  233.  
  234. ; move.l 4.w,a6
  235. ; move.l memaddr,a1
  236. ; move.l #size,d0
  237. ; jsr freemem(a6) =-210
  238.  
  239.  
  240. ** This waits for the blitter to finish before allowing program
  241. ** execution to continue.
  242.  
  243.  
  244.  include "ab3:source_4000/protsetupdecode"
  245.  
  246.  
  247. SAVEREGS MACRO
  248.  movem.l d0-d7/a0-a6,-(a7)
  249.  ENDM
  250.  
  251. GETREGS MACRO
  252.  movem.l (a7)+,d0-d7/a0-a6
  253.  ENDM
  254.  
  255.  
  256. WB MACRO
  257. \@bf:
  258.  btst #6,dmaconr(a6)
  259.  bne.s \@bf
  260.  ENDM
  261.  
  262. WBa MACRO
  263. \@bf:
  264.  move.w #\2,$dff180
  265.  
  266.  btst #6,$bfe001
  267.  bne.s \@bf
  268. \@bz:
  269.  
  270.  move.w #$f0f,$dff180
  271.  
  272.  btst #6,$bfe001
  273.  beq.s \@bz
  274.  
  275.  ENDM
  276.  
  277. *Another version for when a6 <> dff000
  278.  
  279. WBSLOW MACRO
  280. \@bf:
  281.  btst #6,$dff000+dmaconr
  282.  bne.s \@bf
  283.  ENDM
  284.  
  285. WT MACRO
  286. \@bf:
  287.  btst #6,(a3)
  288.  bne.s \@bd
  289.  rts
  290. \@bd: 
  291.  btst #4,(a0)
  292.  beq.s \@bf
  293.  ENDM
  294.  
  295. WTNOT MACRO
  296. \@bf:
  297.  btst #6,(a3)
  298.  bne.s \@bd
  299.  rts
  300. \@bd: 
  301.  btst #4,(a0)
  302.  bne.s \@bf
  303.  ENDM
  304.  
  305. **
  306.  
  307.  include "ab3:source_4000/ProtectionProtection"
  308.  include "macros.i"
  309.  include "ab3:source_4000/defs.i"
  310.  
  311. wtclickk:
  312.  btst #6,$bfe001
  313.  bne.s wtclickk
  314.  
  315.  move.w (a0)+,LEVTOPLAY
  316.  
  317.  
  318.  jsr MakePatch
  319.  
  320. ;    FLASHER $0f0,$fff
  321.  
  322. ; PROTFCALC
  323. ; PROTGCALC
  324. ; PROTHCALC
  325. ; PROTICALC
  326. ; PROTKCALC
  327. ; PROTLCALC
  328. ; PROTMCALC
  329.  
  330.  
  331.  
  332.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  333.  move.w intenar(a6),_storeint
  334.  and.w #$c000,_storeint
  335.  
  336.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  337.  
  338.  
  339.  st GOURSEL
  340.  
  341.  move.l 4.w,a6
  342.  lea VBLANKInt(pc),a1
  343.  moveq #INTB_COPER,d0
  344.  jsr _LVOAddIntServer(a6)
  345.  
  346.     IFEQ CD32VER
  347.  move.l 4.w,a6
  348.  lea KEYInt(pc),a1
  349.  moveq #INTB_PORTS,d0
  350.  jsr _LVOAddIntServer(a6)
  351.     ENDC
  352.  
  353.  IFNE CD32VER
  354.  clr.b PLR1KEYS
  355.  clr.b PLR1PATH
  356.  clr.b PLR1MOUSE
  357.  st PLR1JOY
  358.  clr.b PLR2KEYS
  359.  clr.b PLR2PATH
  360.  clr.b PLR2MOUSE
  361.  st PLR2JOY
  362.  ELSE
  363.  st PLR1KEYS
  364.  clr.b PLR1PATH
  365.  clr.b PLR1MOUSE
  366.  clr.b PLR1JOY
  367.  st PLR2KEYS
  368.  clr.b PLR2PATH
  369.  clr.b PLR2MOUSE
  370.  clr.b PLR2JOY
  371.  ENDC
  372.  
  373.  PRSDO
  374.  
  375.  move.l #2,d1    
  376.  move.l #10240*2,d0
  377.  move.l 4.w,a6
  378.  jsr -198(a6)
  379.  move.l d0,TEXTSCRN
  380.  move.w d0,TSPTl
  381.  swap d0
  382.  move.w d0,TSPTh
  383.  
  384.  move.l #nullspr,d0
  385.  move.w d0,txs0l
  386.  move.w d0,txs1l
  387.  move.w d0,txs2l
  388.  move.w d0,txs3l
  389.  move.w d0,txs4l
  390.  move.w d0,txs5l
  391.  move.w d0,txs6l
  392.  move.w d0,txs7l
  393.  swap d0
  394.  move.w d0,txs0h
  395.  move.w d0,txs1h
  396.  move.w d0,txs2h
  397.  move.w d0,txs3h
  398.  move.w d0,txs4h
  399.  move.w d0,txs5h
  400.  move.w d0,txs6h
  401.  move.w d0,txs7h 
  402.  
  403.  move.l #0,d1    
  404.  move.l #140000,d0
  405.  move.l 4.w,a6
  406.  jsr -198(a6)
  407.  move.l d0,LEVELDATA
  408.  
  409.  move.l #0,d1
  410.  
  411.  ifeq CHEESEY    
  412.  move.l #320*256,d0
  413.  endc
  414.  
  415.  ifne CHEESEY
  416.  move.l #320*160,d0
  417.  endc
  418.  
  419.  move.l 4.w,a6
  420.  jsr -198(a6)
  421.  move.l d0,FASTBUFFER
  422.  
  423.  jsr START
  424.  
  425.  rts
  426.  
  427. FASTBUFFER: dc.l 0
  428.  
  429. _storeint
  430.     dc.w 0
  431.  
  432. * Load level into buffers.
  433.  clr.b doanything
  434.  clr.b dosounds
  435.  
  436. ; DRAW TEXT SCREEN
  437.  
  438. TWEENTEXT:
  439.  
  440.  move.l #LEVELTEXT,a0
  441.  move.w PLOPT,d0
  442.  muls #82*16,d0
  443.  add.l d0,a0
  444.  
  445.  move.w #14,d7
  446.  move.w #0,d0
  447. DOWNTEXT:
  448.  move.l TEXTSCRN,a1
  449.  jsr DRAWLINEOFTEXT
  450.  addq #1,d0
  451.  add.w #82,a0
  452.  dbra d7,DOWNTEXT
  453.  rts
  454.  
  455. FONTADDRS:
  456.  dc.l ENDFONT0,CHARWIDTHS0
  457.  dc.l ENDFONT1,CHARWIDTHS1
  458.  dc.l ENDFONT2,CHARWIDTHS2
  459.  
  460. ENDFONT0:
  461.  incbin "endfont0"
  462. CHARWIDTHS0:
  463.  incbin "charwidths0"
  464. ENDFONT1:
  465. ; incbin "endfont1"
  466. CHARWIDTHS1:
  467. ; incbin "charwidths1"
  468. ENDFONT2:
  469. ; incbin "endfont2"
  470. CHARWIDTHS2:
  471. ; incbin "charwidths2"
  472.  
  473.  even
  474.  
  475. DRAWLINEOFTEXT:
  476.  movem.l d0/a0/d7,-(a7)
  477.  
  478.  muls #80*16,d0
  479.  add.l d0,a1    ; screen pointer
  480.  
  481.  move.l #FONTADDRS,a3
  482.  moveq #0,d0
  483.  move.b (a0)+,d0
  484.  move.l (a3,d0.w*8),a2
  485.  move.l 4(a3,d0.w*8),a3
  486.  
  487.  moveq #0,d1    ; width counter:
  488.  move.w #79,d6
  489.  tst.b (a0)+
  490.  beq.s NOTCENTRED
  491.  moveq #-1,d5
  492.  move.l a0,a4
  493.  moveq #0,d2
  494.  moveq #0,d3
  495.  move.w #79,d0    ; number of chars
  496. .addup:
  497.  addq #1,d5
  498.  move.b (a4)+,d2
  499.  move.b -32(a3,d2.w),d4
  500.  add.w d4,d3
  501.  cmp.b #32,d2
  502.  beq.s .DONTPUTIN
  503.  move.w d5,d6
  504.  move.w d3,d1
  505. .DONTPUTIN:
  506.  dbra d0,.addup
  507.  asr.w #1,d1
  508.  neg.w d1
  509.  add.w #320,d1    ; horiz pos of start x
  510.  
  511. NOTCENTRED:
  512.  move.w d6,d7
  513. DOACHAR:
  514.  moveq #0,d2
  515.  move.b (a0)+,d2
  516.  sub.w #32,d2
  517.  moveq #0,d6
  518.  move.b (a3,d2.w),d6
  519.  asl.w #5,d2
  520.  lea (a2,d2.w),a4    ; char font
  521. val SET 0
  522.  REPT 16
  523.  move.w (a4)+,d0
  524.  bfins d0,val(a1){d1:d6}
  525. val SET val+80
  526.  ENDR
  527.  add.w d6,d1
  528.  dbra d7,DOACHAR
  529.  movem.l (a7)+,d0/a0/d7
  530.  rts 
  531.  
  532.  
  533. CLRTWEENSCRN:
  534.  move.l TEXTSCRN,a0
  535.  move.w #(10240/16)-1,d0
  536.  move.l #$0,d1
  537. .lll
  538.  move.l d1,(a0)+
  539.  move.l d1,(a0)+
  540.  move.l d1,(a0)+
  541.  move.l d1,(a0)+
  542.  move.l d1,(a0)+
  543.  move.l d1,(a0)+
  544.  move.l d1,(a0)+
  545.  move.l d1,(a0)+
  546.  dbra d0,.lll
  547.  rts
  548.  
  549. LEVTOPLAY: dc.w 0
  550.  
  551. COPYLINK: dc.l 0
  552.  
  553. PLAYTHEGAME:
  554.  
  555.  move.w #0,TXTCOLL
  556.  
  557.  bsr CLRTWEENSCRN
  558.  
  559.  cmp.b #'n',mors
  560.  bne.s .notext
  561.  bsr TWEENTEXT
  562. .notext
  563.  
  564. ;charlie 
  565.  move.l #TEXTCOP,$dff080
  566.  
  567.  move.w #$10,d0
  568.  move.w #7,d1
  569.  
  570. .fdup
  571.  move.w d0,TXTCOLL
  572.  add.w #$121,d0
  573. .wtframe:
  574.  btst #5,$dff000+intreqrl
  575.  beq.s .wtframe
  576.  move.w #$0020,$dff000+intreq
  577.  dbra d1,.fdup
  578.  
  579.  jsr INITCOPPERSCRN
  580.  
  581.  move.l #$dff000,a6
  582.  jsr SETPLAYERS
  583.  
  584.  move.l #0,TYPEOFMEM
  585.  move.l #LLname,a0
  586.  jsr LOADAFILE
  587.  move.l d0,LINKS
  588.  
  589.  move.l #0,TYPEOFMEM
  590.  move.l #LLFname,a0
  591.  jsr LOADAFILE
  592.  move.l d0,FLYLINKS
  593.  
  594. ; Get level memory.
  595.  
  596.  move.l #1,d1
  597.  move.l #40000,d0
  598.  move.l 4.w,a6
  599.  jsr -198(a6)
  600.  move.l d0,LEVELGRAPHICS
  601.  
  602.  move.l #1,d1
  603.  move.l #40000,d0
  604.  move.l 4.w,a6
  605.  jsr -198(a6)
  606.  move.l d0,LEVELCLIPS
  607.  
  608.  move.l #$dff000,a6
  609.  
  610. ; move.b LEVTOPLAY,d0
  611. ; move.b d0,LEVA
  612. ; move.b d0,LEVB
  613. ; move.b d0,LEVC
  614. ; move.b d0,LEVD
  615. ; move.b d0,LEVE
  616.  
  617.  
  618. ; move.l #LEVELDATAD,LEVELDATA
  619. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  620. ; move.l #LEVELCLIPSD,LEVELCLIPS
  621.  
  622. ; bra noload
  623.  
  624. *********************************
  625.  
  626. ; move.l doslib,a6
  627. ; move.l #LLname,d1
  628. ; move.l #1005,d2
  629. ; jsr -30(a6)
  630. ; move.l d0,LLhandle
  631. ;
  632. ; move.l doslib,a6
  633. ; move.l d0,d1
  634. ; move.l #LINKS,d2
  635. ; move.l #10000,d3
  636. ; jsr -42(a6)
  637. ;
  638. ; move.l doslib,a6
  639. ; move.l LLhandle,d1
  640. ; jsr -36(a6)
  641.  
  642.  ********************************
  643.  
  644. ; move.l doslib,a6
  645. ; move.l #LLFname,d1
  646. ; move.l #1005,d2
  647. ; jsr -30(a6)
  648. ; move.l d0,LLhandle
  649.  
  650. ; move.l doslib,a6
  651. ; move.l d0,d1
  652. ; move.l #FLYLINKS,d2
  653. ; move.l #10000,d3
  654. ; jsr -42(a6)
  655.  
  656. ; move.l doslib,a6
  657. ; move.l LLhandle,d1
  658. ; jsr -36(a6)
  659.  
  660.  ************************
  661.  ********
  662.  
  663.  
  664.  move.l doslib,a6
  665.  move.l #LDname,d1
  666.  move.l #1005,d2
  667.  jsr -30(a6)
  668.  move.l d0,LDhandle
  669.  
  670.  move.l doslib,a6
  671.  move.l d0,d1
  672.  move.l LEVELCLIPS,d2
  673.  move.l #40000,d3
  674.  jsr -42(a6)
  675.  
  676.  move.l doslib,a6
  677.  move.l LDhandle,d1
  678.  jsr -36(a6)
  679.  
  680. *************************************
  681.     move.l    LEVELCLIPS,d0
  682.     moveq    #0,d1
  683.     move.l LEVELDATA,a0
  684.     lea    WorkSpace,a1
  685.     lea    $0,a2
  686.     jsr    unLHA
  687. *************************************
  688.  
  689. ********
  690.  
  691.  move.l doslib,a6
  692.  move.l #LGname,d1
  693.  move.l #1005,d2
  694.  jsr -30(a6)
  695.  move.l d0,LGhandle
  696.  
  697.  move.l doslib,a6
  698.  move.l d0,d1
  699.  move.l LEVELCLIPS,d2
  700.  move.l #40000,d3
  701.  jsr -42(a6)
  702.  
  703.  move.l doslib,a6
  704.  move.l LGhandle,d1
  705.  jsr -36(a6)
  706.  
  707. *************************************
  708.     move.l    LEVELCLIPS,d0
  709.     moveq    #0,d1
  710.     move.l LEVELGRAPHICS,a0
  711.     lea    WorkSpace,a1
  712.     lea    $0,a2
  713.     jsr    unLHA
  714. *************************************
  715.  
  716. ********
  717.  
  718.  move.l doslib,a6
  719.  move.l #LCname,d1
  720.  move.l #1005,d2
  721.  jsr -30(a6)
  722.  move.l d0,LChandle
  723.  
  724.  move.l doslib,a6
  725.  move.l d0,d1
  726.  move.l #WorkSpace+16384,d2
  727.  move.l #16000,d3
  728.  jsr -42(a6)
  729.  
  730.  move.l doslib,a6
  731.  move.l LChandle,d1
  732.  jsr -36(a6)
  733.  
  734. *************************************
  735.     move.l    #WorkSpace+16384,d0
  736.     moveq    #0,d1
  737.     move.l LEVELCLIPS,a0
  738.     lea    WorkSpace,a1
  739.     lea    $0,a2
  740.     jsr    unLHA
  741. *************************************
  742.  
  743.  
  744. *******
  745.  
  746. noload:
  747.  
  748. ********
  749.  
  750. ; move.l doslib,a6
  751. ; move.l #Prefsname,d1
  752. ; move.l #1005,d2
  753. ; jsr -30(a6)
  754. ; move.l d0,Prefshandle
  755.  
  756. ; move.l doslib,a6
  757. ; move.l d0,d1
  758. ; move.l #Prefsfile,d2
  759. ; move.l #50,d3
  760. ; jsr -42(a6)
  761.  
  762. ; move.l doslib,a6
  763. ; move.l Prefshandle,d1
  764. ; jsr -36(a6)
  765.  
  766. *******
  767.  
  768.  IFNE CD32VER
  769.  move.l doslib,a6
  770.  move.l #115,d1
  771.  jsr -198(a6)
  772.  ENDC
  773.  
  774.  
  775. ; move.l doslib,d0
  776. ; move.l d0,a1
  777. ; move.l 4.w,a6
  778. ; jsr CloseLib(a6)
  779.  
  780.  move.l #$dff000,a6
  781.  
  782. charlie:
  783. ; jmp  ENDGAMESCROLL
  784.  
  785.     move.w #$87c0,dmacon(a6)
  786.  
  787.     move.w    #%1000000000100000,dmacon(a6)
  788.  
  789. ; move.w intenar(a6),saveinters
  790.     
  791.     move.w #%00101111,intena(a6)
  792.  
  793.     move.w #255,adkcon(a6)
  794.  
  795.  
  796. *** Put myself in supervisor mode
  797.  
  798.  bra blag
  799. ; move.l $6c,d0
  800. ; move.l #blag,$6c
  801. ; move.w #$8010,intreq(a6)
  802.  
  803.  rts
  804.  
  805. saveit: ds.l 10
  806. doslibname: dc.b 'dos.library',0
  807.  even
  808. doslib: dc.l 0
  809.  
  810. mors: dc.w 0
  811.  
  812. LDname: dc.b 'ab3:levels/level_'
  813. LEVA:
  814.  dc.b 'a/twolev.bin',0
  815.  even
  816. LDhandle: dc.l 0
  817. LGname: dc.b 'ab3:levels/level_'
  818. LEVB:
  819.  dc.b 'a/twolev.graph.bin',0
  820.  even
  821. LGhandle: dc.l 0
  822. LCname: dc.b 'ab3:levels/level_'
  823. LEVC:
  824.  dc.b 'a/twolev.clips',0
  825.  even
  826. LChandle: dc.l 0
  827. LLname: dc.b 'ab3:levels/level_'
  828. LEVD:
  829.  dc.b 'a/twolev.map',0
  830.  even
  831. LLFname: dc.b 'ab3:levels/level_'
  832. LEVE:
  833.  dc.b 'a/twolev.flymap',0
  834.  even
  835. LLhandle: dc.l 0
  836.  
  837.     cnop    0,4
  838.  
  839. Prefsname: dc.b 'ram:prefs',0
  840.  even
  841. Prefshandle: dc.l 0
  842.  
  843. Prefsfile:
  844.  dc.b 'k4nx'
  845.  
  846.  even
  847.  
  848.  cnop 0,4
  849.  
  850. VBLANKInt
  851.  dc.l 0,0
  852.  dc.b NT_INTERRUPT,9
  853.  dc.l Prefsname
  854.  dc.l 0
  855.  dc.l Chan0inter
  856.  
  857.  
  858. KEYInt
  859.  dc.l 0,0
  860.  dc.b NT_INTERRUPT,127
  861.  dc.l Prefsname
  862.  dc.l 0
  863.  dc.l key_interrupt
  864.  
  865.  
  866. blag:
  867. ; move.w #$10,intreq(a6)
  868. ; move.l d0,$6c
  869. ; move.w #$7fff,intena(a6)
  870.  
  871. ; move.w #$20,$dff1dc
  872.  
  873. ; move.l 4.w,a6
  874. ; lea VBLANKInt(pc),a1
  875. ; moveq #INTB_COPER,d0
  876. ; jsr _LVOAddIntServer(a6)
  877.  
  878. ****************************
  879. * Initialize level
  880. ****************************
  881. * Poke all clip offsets into
  882. * correct bit of level data.
  883. ****************************
  884.  move.l LEVELGRAPHICS,a0
  885.  move.l 12(a0),a1
  886.  add.l a0,a1
  887.  move.l a1,ZoneGraphAdds
  888.  move.l (a0),a1
  889.  add.l a0,a1
  890.  move.l a1,DoorData
  891.  move.l 4(a0),a1
  892.  add.l a0,a1
  893.  move.l a1,LiftData
  894.  move.l 8(a0),a1
  895.  add.l a0,a1
  896.  move.l a1,SwitchData
  897.  adda.w #16,a0
  898.  move.l a0,ZoneAdds
  899.  
  900.  move.l LEVELDATA,a4
  901.  lea 160*10(a4),a1
  902.  
  903.  lea 54(a1),a2
  904.  move.l a2,CPtPos
  905.  move.w 12(a1),NumCPts
  906.  move.w 14(a1),NumLevPts
  907.  
  908.  move.l 16+6(a1),a2
  909.  add.l a4,a2
  910.  move.l a2,Points
  911.  move.w 8+6(a1),d0
  912.  lea 4(a2,d0.w*4),a2
  913.  move.l a2,PointBrights
  914.  move.w 16(a1),d0
  915.  addq #1,d0
  916.  muls #80,d0
  917.  add.l d0,a2
  918.  move.l a2,ZoneBorderPts
  919.  
  920.  move.l 20+6(a1),a2
  921.  add.l a4,a2
  922.  move.l a2,FloorLines
  923.  move.w -2(a2),ENDZONE
  924.  move.l 24+6(a1),a2
  925.  add.l a4,a2
  926.  move.l a2,ObjectData
  927. *****************************************
  928. * Just for charles
  929.  
  930. ; move.w #$6060,6(a2)
  931. ; move.l #$d0000,8(a2)
  932. ; sub.w #40,4(a2)
  933. ; move.w #45*256+45,14(a2)
  934. ****************************************
  935.  move.l 28+6(a1),a2
  936.  add.l a4,a2
  937.  move.l a2,PlayerShotData
  938.  move.l 32+6(a1),a2
  939.  add.l a4,a2
  940.  move.l a2,NastyShotData
  941.  
  942.  add.l #64*20,a2
  943.  move.l a2,OtherNastyData
  944.  
  945.  move.l 36+6(a1),a2
  946.  add.l a4,a2
  947.  move.l a2,ObjectPoints  
  948.  move.l 40+6(a1),a2
  949.  add.l a4,a2
  950.  move.l a2,PLR1_Obj
  951.  move.l 44+6(a1),a2
  952.  add.l a4,a2
  953.  move.l a2,PLR2_Obj
  954.  move.w 14+6(a1),NumObjectPoints
  955.  
  956. ; bra noclips
  957.   
  958.  move.l LEVELCLIPS,a2
  959.  moveq #0,d0
  960.  move.w 10+6(a1),d7    ;numzones
  961.  move.w d7,NUMZONES
  962. assignclips:
  963.  move.l (a0)+,a3
  964.  add.l a4,a3    ; pointer to a zone
  965.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  966. dowholezone:
  967.  tst.w (a3)
  968.  blt.s nomorethiszone
  969.  tst.w 2(a3)
  970.  blt.s thisonenull
  971.  
  972.  move.l d0,d1
  973.  asr.l #1,d1
  974.  move.w d1,2(a3)
  975.  
  976. findnextclip:
  977.  cmp.w #-2,(a2,d0.l)
  978.  beq.s foundnextclip
  979.  addq.l #2,d0
  980.  bra.s findnextclip
  981. foundnextclip
  982.  addq.l #2,d0
  983.  
  984. thisonenull:
  985.  addq #8,a3 
  986.  bra.s dowholezone
  987. nomorethiszone:
  988.  dbra d7,assignclips
  989.  
  990.  lea (a2,d0.l),a2
  991.  move.l a2,CONNECT_TABLE
  992.  
  993. noclips:
  994.  
  995. * Put in addresses of glowything
  996.  
  997.  
  998. ************************************
  999.  
  1000. ; cmp.b #'k',Prefsfile
  1001. ; bne.s nkb
  1002.  
  1003. ;nkb:
  1004. ; cmp.b #'m',Prefsfile
  1005. ; bne.s nmc
  1006. ; clr.b PLR1KEYS
  1007. ; clr.b PLR1PATH
  1008. ; st PLR1MOUSE
  1009. ; clr.b PLR1JOY
  1010. ;nmc:
  1011. ; cmp.b #'j',Prefsfile
  1012. ; bne.s njc
  1013. ; clr.b PLR1KEYS
  1014. ; clr.b PLR1PATH
  1015. ; clr.b PLR1MOUSE
  1016. ; st PLR1JOY
  1017. ;njc:
  1018.  
  1019.  clr.b PLR1_StoodInTop
  1020.  move.l #playerheight,PLR1s_height
  1021.  
  1022.  move.l #empty,pos1LEFT
  1023.  move.l #empty,pos2LEFT
  1024.  move.l #empty,pos1RIGHT
  1025.  move.l #empty,pos2RIGHT
  1026.  move.l #empty,pos0LEFT
  1027.  move.l #empty,pos3LEFT
  1028.  move.l #empty,pos0RIGHT
  1029.  move.l #empty,pos3RIGHT
  1030.  move.l #emptyend,Samp0endLEFT
  1031.  move.l #emptyend,Samp1endLEFT
  1032.  move.l #emptyend,Samp0endRIGHT
  1033.  move.l #emptyend,Samp1endRIGHT
  1034.  move.l #emptyend,Samp2endLEFT
  1035.  move.l #emptyend,Samp3endLEFT
  1036.  move.l #emptyend,Samp2endRIGHT
  1037.  move.l #emptyend,Samp3endRIGHT
  1038.  
  1039.  
  1040.  move.l #nullline,d0
  1041.  move.w d0,n1l
  1042.  swap d0
  1043.  move.w d0,n1h
  1044.  
  1045.  move.l Panel,d0
  1046.  move.w d0,p1l
  1047.  swap d0
  1048.  move.w d0,p1h
  1049.  swap d0
  1050.  add.l #40,d0
  1051.  move.w d0,p2l
  1052.  swap d0
  1053.  move.w d0,p2h
  1054.  swap d0
  1055.  add.l #40,d0
  1056.  move.w d0,p3l
  1057.  swap d0
  1058.  move.w d0,p3h
  1059.  swap d0
  1060.  add.l #40,d0
  1061.  move.w d0,p4l
  1062.  swap d0
  1063.  move.w d0,p4h
  1064.  swap d0
  1065.  add.l #40,d0
  1066.  move.w d0,p5l
  1067.  swap d0
  1068.  move.w d0,p5h
  1069.  swap d0
  1070.  add.l #40,d0
  1071.  move.w d0,p6l
  1072.  swap d0
  1073.  move.w d0,p6h
  1074.  swap d0
  1075.  add.l #40,d0
  1076.  move.w d0,p7l
  1077.  swap d0
  1078.  move.w d0,p7h
  1079.  swap d0
  1080.  add.l #40,d0
  1081.  move.w d0,p8l
  1082.  swap d0
  1083.  move.w d0,p8h
  1084.  
  1085. *******************************
  1086. * TIMER SCREEN SETUP
  1087. ; move.l #TimerScr,d0
  1088. ; move.w d0,p1l
  1089. ; swap d0
  1090. ; move.w d0,p1h
  1091. ; move.w #$1201,Panelcon
  1092.  
  1093. ; move.l #borders,d0
  1094. ; move.w d0,s0l
  1095. ; swap d0
  1096. ; move.w d0,s0h
  1097. ; move.l #borders+2592,d0
  1098. ; move.w d0,s1l
  1099. ; swap d0
  1100. ; move.w d0,s1h
  1101. ; move.l #borders+2592*2,d0
  1102. ; move.w d0,s2l
  1103. ; swap d0
  1104. ; move.w d0,s2h
  1105. ; move.l #borders+2592*3,d0
  1106. ; move.w d0,s3l
  1107. ; swap d0
  1108. ; move.w d0,s3h
  1109.  
  1110.  move.l #nullspr,d0
  1111.  move.w d0,s0l
  1112.  move.w d0,s1l
  1113.  move.w d0,s2l
  1114.  move.w d0,s3l
  1115.  
  1116.  move.w d0,s4l
  1117.  move.w d0,s5l
  1118.  move.w d0,s6l
  1119.  move.w d0,s7l
  1120.  swap d0
  1121.  
  1122.  move.w d0,s0h
  1123.  move.w d0,s1h
  1124.  move.w d0,s2h
  1125.  move.w d0,s3h
  1126.  
  1127.  move.w d0,s4h
  1128.  move.w d0,s5h
  1129.  move.w d0,s6h
  1130.  move.w d0,s7h 
  1131.  
  1132.  
  1133. ; move.w #52*256+64,borders
  1134. ; move.w #212*256+0,borders+8
  1135. ; move.w #52*256+64,borders+2592
  1136. ; move.w #212*256+128,borders+8+2592
  1137. ; move.w #52*256+192,borders+2592*2
  1138. ; move.w #212*256+0,borders+8+2592*2
  1139. ; move.w #52*256+192,borders+2592*3
  1140. ; move.w #212*256+128,borders+8+2592*3
  1141.  
  1142.  move.l #FacePlace,d0
  1143.  move.w d0,f1l
  1144.  swap d0
  1145.  move.w d0,f1h
  1146.  move.l #FacePlace+32*24,d0
  1147.  move.w d0,f2l
  1148.  swap d0
  1149.  move.w d0,f2h
  1150.  move.l #FacePlace+32*24*2,d0
  1151.  move.w d0,f3l
  1152.  swap d0
  1153.  move.w d0,f3h
  1154.  move.l #FacePlace+32*24*3,d0
  1155.  move.w d0,f4l
  1156.  swap d0
  1157.  move.w d0,f4h
  1158.  move.l #FacePlace+32*24*4,d0
  1159.  move.w d0,f5l
  1160.  swap d0
  1161.  move.w d0,f5h
  1162.   
  1163.  
  1164.  move.l #bigfield,d0
  1165.  move.w d0,ocl
  1166.  swap d0
  1167.  move.w d0,och
  1168.  
  1169.  bset.b #1,$bfe001
  1170.  
  1171. ; jmp stuff
  1172. ;endstuff:
  1173.  
  1174.  move.w #$00ff,$dff09e
  1175.  
  1176. ; move.l #Blurbfield,$dff080
  1177.  
  1178.  move.w #0,d0
  1179.  
  1180.  move.l scrn,d0
  1181.  move.w d0,pl1l
  1182.  swap d0
  1183.  move.w d0,pl1h
  1184.  
  1185.  swap d0
  1186.  add.l #10240,d0
  1187.  move.w d0,pl2l
  1188.  swap d0
  1189.  move.w d0,pl2h
  1190.  
  1191.  swap d0
  1192.  add.l #10240,d0
  1193.  move.w d0,pl3l
  1194.  swap d0
  1195.  move.w d0,pl3h
  1196.  
  1197.  swap d0
  1198.  add.l #10240,d0
  1199.  move.w d0,pl4l
  1200.  swap d0
  1201.  move.w d0,pl4h
  1202.  
  1203.  swap d0
  1204.  add.l #10240,d0
  1205.  move.w d0,pl5l
  1206.  swap d0
  1207.  move.w d0,pl5h
  1208.  
  1209.  swap d0
  1210.  add.l #10240,d0
  1211.  move.w d0,pl6l
  1212.  swap d0
  1213.  move.w d0,pl6h
  1214.  
  1215.  swap d0
  1216.  add.l #10240,d0
  1217.  move.w d0,pl7l
  1218.  swap d0
  1219.  move.w d0,pl7h
  1220.  
  1221.  swap d0
  1222.  add.l #10240,d0
  1223.  move.w d0,pl8l
  1224.  swap d0
  1225.  move.w d0,pl8h
  1226.  
  1227.  
  1228. ****************************
  1229.  jsr INITPLAYER
  1230. ; bsr initobjpos
  1231. ****************************
  1232.  
  1233.  
  1234.  move.l #$dff000,a6
  1235.  
  1236.  move.l #null,$dff0a0
  1237.  move.w #100,$dff0a4
  1238.  move.w #443,$dff0a6
  1239.  move.w #63,$dff0a8
  1240.  
  1241.  move.l #null2,$dff0b0
  1242.  move.w #100,$dff0b4
  1243.  move.w #443,$dff0b6
  1244.  move.w #63,$dff0b8
  1245.  
  1246.  move.l #null4,$dff0c0
  1247.  move.w #100,$dff0c4
  1248.  move.w #443,$dff0c6
  1249.  move.w #63,$dff0c8
  1250.  
  1251.  move.l #null3,$dff0d0
  1252.  move.w #100,$dff0d4
  1253.  move.w #443,$dff0d6
  1254.  move.w #63,$dff0d8
  1255.  
  1256.  ifeq CHEESEY
  1257.  
  1258.  move.l #tab,a1
  1259.  move.w #64,d7
  1260.  move.w #0,d6
  1261. outerlop
  1262.  move.l #pretab,a0
  1263.  move.w #255,d5
  1264. scaledownlop:
  1265.  move.b (a0)+,d0
  1266.  ext.w d0
  1267.  ext.l d0
  1268.  muls d6,d0
  1269.  asr.l #6,d0
  1270.  move.b d0,(a1)+
  1271.  dbra d5,scaledownlop
  1272.  addq #1,d6
  1273.  dbra d7,outerlop
  1274.  
  1275.  endc
  1276.  
  1277.  move.l #$dff000,a6
  1278.  
  1279.  move.w #$c018,intena(a6)
  1280.  
  1281.  move.w #$f,dmacon(a6)
  1282.  move.w #$820f,dmacon(a6)
  1283.  
  1284. ; bsr protinit
  1285.  
  1286.  
  1287. ; move.w #$20,$1dc(a6)
  1288.  
  1289.  move.w #$0,$dff034
  1290.  move.w #0,Conditions
  1291.  
  1292.  cmp.b #'n',mors
  1293.  beq.s .nokeys
  1294.  move.w #%111111111111,Conditions
  1295. .nokeys:
  1296.  
  1297.  move.l #KeyMap,a5
  1298.  clr.b $45(a5)
  1299.  
  1300.  move.l #ingame,mt_data
  1301.  clr.b UseAllChannels
  1302.  
  1303. ; cmp.b #'b',Prefsfile+3
  1304. ; bne.s .noback
  1305. ; jsr mt_init
  1306. ;.noback:
  1307. ;
  1308. ; clr.b CHANNELDATA
  1309. ; clr.b CHANNELDATA+8
  1310. ; clr.b CHANNELDATA+16
  1311. ; clr.b CHANNELDATA+24
  1312. ;
  1313. ; cmp.b #'b',Prefsfile+3
  1314. ; bne.s noreserve
  1315. ;
  1316. ; st CHANNELDATA
  1317. ; st CHANNELDATA+8
  1318. ; st CHANNELDATA+16
  1319. ; st CHANNELDATA+24
  1320. ;noreserve: 
  1321.  
  1322. ; st CHANNELDATA
  1323. ; st CHANNELDATA+8
  1324.  
  1325.  move.l SampleList+6*8,pos0LEFT
  1326.  move.l SampleList+6*8+4,Samp0endLEFT
  1327.  move.l #playerheight,PLR1s_targheight
  1328.  move.l #playerheight,PLR1s_height
  1329.  move.l #playerheight,PLR2s_targheight
  1330.  move.l #playerheight,PLR2s_height
  1331.  
  1332. ; cmp.b #'n',mors
  1333. ; beq.s nohandshake
  1334. ;
  1335. ; move.b #%11011000,$bfd200
  1336. ; move.b #%00010000,$bfd000
  1337. ;waitloop:
  1338. ; btst.b #4,$bfd000
  1339. ; bne.s waitloop
  1340. ; move.b #%11000000,$bfd200
  1341.  
  1342. ;wtmouse:
  1343. ; btst #6,$bfe001
  1344. ; bne.s wtmouse
  1345.  
  1346. ;nohandshake:
  1347.  
  1348. ; jmp end
  1349.  
  1350. ; move.l COPSCRN1,drawpt
  1351. ; move.l COPSCRN2,olddrawpt
  1352.  
  1353.  jsr CLEARKEYBOARD
  1354. ; jsr MAKEBACKROUT
  1355.  
  1356.  clr.b MASTERQUITTING
  1357.  
  1358.  cmp.b #'n',mors
  1359.  seq SLAVEQUITTING
  1360.  
  1361. ; move.w #200,PLAYERTWOHEALTH
  1362. ; move.w #200,PLAYERONEHEALTH
  1363.  
  1364. ; move.l #ANOTHERSUP,$80
  1365. ; trap #0
  1366. ; rts
  1367. ;
  1368. ;ANOTHERSUP:
  1369.  
  1370.  move.l $4.w,a6
  1371.  jsr _LVOSuperState(a6)
  1372.  move.l d0,SSTACK
  1373.  
  1374.  CACHE_FREEZE_OFF d2
  1375.  
  1376. ; charlie
  1377. ; DATA_CACHE_ON d2
  1378.  
  1379.  DataCacheOn
  1380.  
  1381.  move.l $4.w,a6
  1382.  move.l SSTACK,d0
  1383.  jsr _LVOUserState(a6)
  1384.  
  1385.  move.l #0,hitcol
  1386.  
  1387.  cmp.b #'n',mors
  1388.  bne.s NOCLTXT
  1389.  
  1390.  move.b #0,lastpressed
  1391. .wtpress
  1392.  btst #6,$bfe001
  1393.  beq.s CLOSETXT
  1394.  btst #7,$bfe001
  1395.  beq.s CLOSETXT
  1396.  tst.b lastpressed
  1397.  beq.s .wtpress
  1398.  
  1399. CLOSETXT:
  1400.  
  1401.  move.w #$8f8,d0
  1402.  move.w #7,d1
  1403.  
  1404. .fdup
  1405.  move.w d0,TXTCOLL
  1406.  sub.w #$121,d0
  1407. .wtframe:
  1408.  btst #5,$dff000+intreqrl
  1409.  beq.s .wtframe
  1410.  move.w #$0020,$dff000+intreq
  1411.  dbra d1,.fdup
  1412.  
  1413.  move.w #0,TXTCOLL
  1414.  
  1415. NOCLTXT:
  1416.  
  1417.  
  1418.  
  1419.     move.l    4.w,a6
  1420.     jsr    _LVOForbid(a6)
  1421. ;    jsr    _LVODisable(a6)
  1422.  
  1423.  
  1424. ;    move.w    #%0111111111111111,intena+$dff000
  1425. ;    move.w    #%1000000011111111,intena+$dff000
  1426.  
  1427.  
  1428. ;charlie 
  1429.  move.l #PALETTEBIT,$dff084
  1430.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1431.  
  1432.  
  1433.  clr.b PLR1_Ducked
  1434.  clr.b PLR2_Ducked
  1435.  clr.b p1_ducked
  1436.  clr.b p2_ducked
  1437.  
  1438. ********************************************
  1439.  
  1440. ;    jmp docredits
  1441.  
  1442. ********************************************
  1443.  
  1444.  
  1445.  st doanything
  1446.  st dosounds
  1447.  
  1448.  jsr CLRNASTYMEM
  1449.  
  1450.  move.l #COMPACTMAP,a0
  1451.  move.l a0,LASTZONE
  1452.  move.w #255,d0
  1453. .clrmap
  1454.  move.l #0,(a0)+
  1455.  dbra d0,.clrmap
  1456.  
  1457.  move.l #COMPACTMAP,a0
  1458.  move.l #BIGMAP,a1
  1459.  
  1460.  bra NOALLWALLS
  1461.  
  1462.  move.l ZoneGraphAdds,a2
  1463. DOALLWALLS:
  1464.  move.l (a2),d0
  1465.  beq.s nomorezones
  1466.  move.l d0,a3
  1467.  
  1468.  addq #8,a2
  1469.  
  1470.  add.l LEVELGRAPHICS,a3
  1471.  addq #2,a3
  1472.  move.l a1,a4
  1473.  
  1474. ; DOLOWERROOM
  1475.  
  1476. innerwalls:
  1477.  move.b (a3),d1
  1478.  move.b 1(a3),d0
  1479.  bne doneinner
  1480.  
  1481.  tst.b d1
  1482.  blt noid
  1483.  
  1484.  move.b d1,d3
  1485.  and.w #15,d1
  1486.  
  1487.  moveq #0,d0
  1488.  move.w d1,d2
  1489.  add.w d1,d1
  1490.  add.w d2,d1
  1491.  addq #1,d1
  1492.  bset d1,d0
  1493.  btst #4,d3
  1494.  beq.s .nodoor
  1495.  addq #1,d1
  1496.  bset d1,d0
  1497. .nodoor
  1498.  
  1499.  or.l d0,(a0)
  1500.  
  1501.  move.w 2(a3),(a4)
  1502.  move.w 4(a3),2(a4)
  1503.  
  1504. noid:
  1505.  
  1506.  add.w #30,a3
  1507.  addq #4,a4
  1508.  
  1509.  bra innerwalls
  1510.  
  1511. doneinner:
  1512.  
  1513.  add.w #40,a1
  1514.  addq #4,a0
  1515.  
  1516.  bra DOALLWALLS
  1517. nomorezones:
  1518.  
  1519. NOALLWALLS
  1520.  
  1521.  move.w #96,MIDDLEX
  1522.  move.w #192,RIGHTX
  1523.  move.w #160,BOTTOMY
  1524.  move.w #80,TOTHEMIDDLE
  1525.  clr.b FULLSCR
  1526.  move.l scrn,a0
  1527.  jsr WIPEDISPLAY
  1528.  move.l scrn2,a0
  1529.  jsr WIPEDISPLAY
  1530.  
  1531.  st PLAYERONEGUNS+1
  1532.  st PLAYERTWOGUNS+1
  1533.  
  1534.  move.w #100,timetodamage
  1535.  
  1536.  move.w #299,d0
  1537.  move.l #DAMAGED,a0
  1538. CLRDAM:
  1539.  move.w #0,(a0)+
  1540.  dbra d0,CLRDAM
  1541.  
  1542.  moveq #0,d0
  1543.  move.w d0,STOPOFFSET
  1544.  neg.w d0
  1545.  add.w TOTHEMIDDLE,d0
  1546.  move.w d0,SMIDDLEY
  1547.  muls #320,d0
  1548.  move.l d0,SBIGMIDDLEY
  1549.  
  1550.  move.w #0,PLR1_AIMSPD
  1551.  move.w #0,PLR2_AIMSPD
  1552.  
  1553.  move.l scrn,SCRNSHOWPT
  1554.  
  1555.  move.l scrn2,SCRNDRAWPT
  1556.  
  1557.  move.w #%110000000000,$dff034
  1558.  
  1559.  
  1560. lop:
  1561.  
  1562.  move.b MAPON,REALMAPON
  1563.  
  1564.  move.b FULLSCRTEMP,d0
  1565.  move.b FULLSCR,d1
  1566.  eor.b d1,d0
  1567.  beq.s .notswapscr2
  1568.  
  1569.  move.b FULLSCRTEMP,FULLSCR
  1570.  beq.s .notswapscr3
  1571.  
  1572.  move.w #144,MIDDLEX
  1573.  move.w #288,RIGHTX
  1574.  move.w #232,BOTTOMY
  1575.  move.w #120,TOTHEMIDDLE
  1576.  move.l SCRNSHOWPT,a0
  1577.  jsr WIPEDISPLAY
  1578.  move.l SCRNDRAWPT,a0
  1579.  jsr WIPEDISPLAY
  1580.  
  1581.  bra.s .notswapscr2
  1582.  
  1583. .notswapscr3:
  1584.  move.w #96,MIDDLEX
  1585.  move.w #192,RIGHTX
  1586.  move.w #160,BOTTOMY
  1587.  move.w #80,TOTHEMIDDLE
  1588.  move.l SCRNSHOWPT,a0
  1589.  jsr WIPEDISPLAY
  1590.  move.l SCRNDRAWPT,a0
  1591.  jsr WIPEDISPLAY
  1592. .notswapscr2:
  1593.  
  1594.  
  1595.  btst #6,$bfe001
  1596. ;charlie bne.b .nocop
  1597.  
  1598. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1599.  
  1600. .nocop
  1601.  
  1602.  move.l #KeyMap,a5
  1603.  
  1604.  cmp.b #'n',mors
  1605.  bne .nopause
  1606.  tst.b $19(a5)
  1607.  beq.s .nopause
  1608.  clr.b doanything
  1609.  
  1610. .waitrel:
  1611.  
  1612.  tst.b PLR1JOY
  1613.  beq.s .NOJOY
  1614.  jsr _ReadJoy1
  1615. .NOJOY
  1616.  
  1617.  tst.b $19(a5)
  1618.  bne.s .waitrel
  1619.  
  1620.  bsr PAUSEOPTS
  1621.  
  1622.  st doanything
  1623. .nopause: 
  1624.  
  1625.  move.l hitcol,d0
  1626.  move.l d0,d1
  1627.  
  1628. ********************************************
  1629. * Remove after colour testing 
  1630. ; moveq #0,d1
  1631. ********************************************
  1632.  
  1633.  add.l #PALETTEBIT,d1
  1634.  tst.l d0
  1635.  beq.s nofadedownhc
  1636.  sub.l #2116,d0
  1637.  move.l d0,hitcol
  1638. nofadedownhc:
  1639.  
  1640.  move.l d1,a0
  1641.  move.l #PALETTESPACE,a1
  1642.  move.l #(2116/4)-2,d0
  1643. putinpal:
  1644.  move.l (a0)+,(a1)+
  1645.  dbra d0,putinpal
  1646.  
  1647.  st READCONTROLS
  1648.  move.l #$dff000,a6
  1649.  
  1650.  
  1651.  cmp.b #'n',mors
  1652.  beq .nopause
  1653.  
  1654.  move.b SLAVEPAUSE,d0
  1655.  or.b MASTERPAUSE,d0
  1656.  beq.s .nopause
  1657.  clr.b doanything
  1658.  
  1659.  move.l #KeyMap,a5
  1660. .waitrel:
  1661.  
  1662.  cmp.b #'s',mors
  1663.  beq.s .RE2
  1664.  tst.b PLR1JOY
  1665.  beq.s .NOJOY
  1666.  jsr _ReadJoy1
  1667.  bra .RE1
  1668. .RE2:
  1669.  tst.b PLR2JOY
  1670.  beq.s .NOJOY
  1671.  jsr _ReadJoy2
  1672. .RE1
  1673. .NOJOY:
  1674.  tst.b $19(a5)
  1675.  bne.s .waitrel
  1676.  
  1677.  bsr PAUSEOPTS
  1678.  
  1679.  cmp.b #'m',mors
  1680.  bne.s .slavelast
  1681.  Jsr SENDFIRST
  1682.  bra .masfirst
  1683. .slavelast
  1684.  Jsr RECFIRST
  1685. .masfirst:
  1686.  clr.b SLAVEPAUSE
  1687.  clr.b MASTERPAUSE
  1688.  st doanything
  1689.  
  1690. .nopause: 
  1691.  
  1692.  
  1693.  move.l drawpt,d0
  1694.  move.l olddrawpt,drawpt
  1695.  move.l d0,olddrawpt
  1696.  
  1697.  move.l SCRNDRAWPT,d0
  1698.  move.l SCRNSHOWPT,SCRNDRAWPT
  1699.  move.l d0,SCRNSHOWPT
  1700.  
  1701. ; move.l d0,$dff084    
  1702.  move.l drawpt,a3
  1703. ; move.l COPSCRNBUFF,a3
  1704.  adda.w #10,a3
  1705.  move.l a3,frompt
  1706.  add.l #104*4*40,a3
  1707.  move.l a3,midpt
  1708.  
  1709.  cmp.b #'s',mors
  1710.  beq.s nowaitslave
  1711.  
  1712. waitfortop:
  1713.  
  1714.  btst.b #0,intreqrl(a6)
  1715.  beq.b waitfortop
  1716.  
  1717.  move.w #$1,intreq(a6)
  1718. ; move.l #PLR1_GunData,GunData
  1719.  move.b PLR1_GunSelected,GunSelected
  1720.  bra waitmaster
  1721.  
  1722. nowaitslave:
  1723. ; move.l #PLR2_GunData,GunData
  1724.  move.b PLR2_GunSelected,GunSelected
  1725. waitmaster:
  1726.  
  1727.  move.l d0,d1
  1728.  move.l d1,d0
  1729.  move.w d0,pl1l
  1730.  swap d0
  1731.  move.w d0,pl1h
  1732.  
  1733.  add.l #10240,d1
  1734.  move.l d1,d0
  1735.  move.w d0,pl2l
  1736.  swap d0
  1737.  move.w d0,pl2h
  1738.  
  1739.  add.l #10240,d1
  1740.  move.l d1,d0
  1741.  move.w d0,pl3l
  1742.  swap d0
  1743.  move.w d0,pl3h
  1744.  
  1745.  add.l #10240,d1
  1746.  move.l d1,d0
  1747.  move.w d0,pl4l
  1748.  swap d0
  1749.  move.w d0,pl4h
  1750.  
  1751.  add.l #10240,d1
  1752.  move.l d1,d0
  1753.  move.w d0,pl5l
  1754.  swap d0
  1755.  move.w d0,pl5h
  1756.  
  1757.  add.l #10240,d1
  1758.  move.l d1,d0
  1759.  move.w d0,pl6l
  1760.  swap d0
  1761.  move.w d0,pl6h
  1762.  
  1763.  add.l #10240,d1
  1764.  move.l d1,d0
  1765.  move.w d0,pl7l
  1766.  swap d0
  1767.  move.w d0,pl7h
  1768.  
  1769.  add.l #10240,d1
  1770.  move.l d1,d0
  1771.  move.w d0,pl8l
  1772.  swap d0
  1773.  move.w d0,pl8h 
  1774.  
  1775.  move.l #SMIDDLEY,a0
  1776.  movem.l (a0)+,d0/d1
  1777.  move.l d0,MIDDLEY
  1778.  move.l d1,MIDDLEY+4
  1779.  
  1780.  move.l waterpt,a0
  1781.  move.l (a0)+,watertouse
  1782.  cmp.l #endwaterlist,a0
  1783.  blt.s okwat
  1784.  move.l #waterlist,a0
  1785. okwat:
  1786.  move.l a0,waterpt
  1787.  
  1788.  add.w #640,wtan
  1789.  and.w #8191,wtan
  1790.  add.l #1,wateroff
  1791.  and.l #$3fff3fff,wateroff
  1792.  
  1793.  move.l PLR1_xoff,OLDX1
  1794.  move.l PLR1_zoff,OLDZ1
  1795.  move.l PLR2_xoff,OLDX2
  1796.  move.l PLR2_zoff,OLDZ2
  1797.  
  1798.  move.l #$dff000,a6
  1799.  
  1800.  cmp.b #'s',mors
  1801.  beq ASlaveShouldWaitOnHisMaster
  1802.  
  1803.  cmp.b #'n',mors
  1804.  bne NotOnePlayer
  1805.  
  1806.  movem.l d0-d7/a0-a6,-(a7)
  1807.  
  1808.  moveq #0,d0
  1809.  move.b GunSelected,d0
  1810.  move.l LINKFILE,a6
  1811.  add.l #GunBulletTypes,a6
  1812.  move.w (a6,d0.w*8),d0
  1813.  
  1814.  move.l #PLAYERONEAMMO,a6
  1815.  move.w (a6,d0.w*2),d0
  1816.  move.w d0,Ammo
  1817.  movem.l (a7)+,d0-d7/a0-a6
  1818.  
  1819.  move.w PLAYERONEHEALTH,Energy
  1820.  
  1821.  move.w FramesToDraw,TempFrames
  1822.  cmp.w #15,TempFrames
  1823.  blt.s .okframe
  1824.  move.w #15,TempFrames
  1825. .okframe:
  1826.  move.w #0,FramesToDraw
  1827.  
  1828. *********************************************
  1829. *********** TAKE THIS OUT *******************
  1830. *********************************************
  1831.  
  1832.  move.l CHEATPTR,a4
  1833.  add.l #200000,a4
  1834.  moveq #0,d0
  1835.  move.b (a4),d0
  1836.  
  1837.  move.l #KeyMap,a5
  1838.  tst.b (a5,d0.w)
  1839.  beq.s .nocheat
  1840.  
  1841.  addq #1,a4
  1842.  cmp.l #ENDCHEAT,a4
  1843.  blt.s .nocheat
  1844.  cmp.w #0,CHEATNUM
  1845.  beq.s .nocheat
  1846.  sub.w #1,CHEATNUM
  1847.  move.l #CHEATFRAME,a4
  1848.  move.w #127,PLR1_energy
  1849.  jsr EnergyBar
  1850. .nocheat
  1851.  
  1852.  sub.l #200000,a4
  1853.  move.l a4,CHEATPTR
  1854.  
  1855. **********************************************
  1856. **********************************************
  1857. **********************************************
  1858.  
  1859.  move.l PLR1s_xoff,p1_xoff
  1860.  move.l PLR1s_zoff,p1_zoff
  1861.  move.l PLR1s_yoff,p1_yoff
  1862.  move.l PLR1s_height,p1_height
  1863.  move.w PLR1s_angpos,p1_angpos
  1864.  move.w PLR1_bobble,p1_bobble
  1865.  move.b PLR1_clicked,p1_clicked
  1866.  move.b PLR1_fire,p1_fire
  1867.  clr.b PLR1_clicked
  1868.  move.b PLR1_SPCTAP,p1_spctap
  1869.  clr.b PLR1_SPCTAP
  1870.  move.b PLR1_Ducked,p1_ducked
  1871.  move.b PLR1_GunSelected,p1_gunselected
  1872.  
  1873.  bsr PLR1_Control
  1874.  
  1875.  move.l PLR1_Roompt,a0
  1876.  move.l ToZoneRoof(a0),SplitHeight
  1877.  move.w p1_xoff,THISPLRxoff
  1878.  move.w p1_zoff,THISPLRzoff
  1879.  
  1880.  
  1881.  move.l #$60000,p2_yoff
  1882.  move.l PLR2_Obj,a0
  1883.  move.w #-1,GraphicRoom(a0)
  1884.  move.w #-1,12(a0)
  1885.  move.b #0,17(a0)
  1886.  move.l #BollocksRoom,PLR2_Roompt
  1887.  
  1888.  bra donetalking
  1889.  
  1890. NotOnePlayer:
  1891.  move.l #KeyMap,a5
  1892.  tst.b $19(a5)
  1893.  sne MASTERPAUSE
  1894.  
  1895. *********************************
  1896.  move.w PLAYERONEHEALTH,Energy
  1897. ; change this back
  1898. *********************************
  1899.  movem.l d0-d7/a0-a6,-(a7)
  1900.  
  1901.  moveq #0,d0
  1902.  move.b GunSelected,d0
  1903.  move.l LINKFILE,a6
  1904.  add.l #GunBulletTypes,a6
  1905.  move.w (a6,d0.w*8),d0
  1906.  
  1907.  move.l #PLAYERONEAMMO,a6
  1908.  move.w (a6,d0.w*2),d0
  1909.  move.w d0,Ammo
  1910.  movem.l (a7)+,d0-d7/a0-a6
  1911.  
  1912.  jsr SENDFIRST
  1913.  
  1914.  move.w FramesToDraw,TempFrames
  1915.  cmp.w #15,TempFrames
  1916.  blt.s .okframe
  1917.  move.w #15,TempFrames
  1918. .okframe:
  1919.  move.w #0,FramesToDraw
  1920.  
  1921.  move.l PLR1s_xoff,p1_xoff
  1922.  move.l PLR1s_zoff,p1_zoff
  1923.  move.l PLR1s_yoff,p1_yoff
  1924.  move.l PLR1s_height,p1_height
  1925.  move.w PLR1s_angpos,p1_angpos
  1926.  move.w PLR1_bobble,p1_bobble
  1927.  move.b PLR1_clicked,p1_clicked
  1928.  clr.b PLR1_clicked
  1929.  move.b PLR1_fire,p1_fire
  1930.  move.b PLR1_SPCTAP,p1_spctap
  1931.  clr.b PLR1_SPCTAP
  1932.  move.b PLR1_Ducked,p1_ducked
  1933.  move.b PLR1_GunSelected,p1_gunselected
  1934.  
  1935.  move.l PLR1_AIMSPD,d0
  1936.  jsr SENDFIRST
  1937.  move.l d0,PLR2_AIMSPD
  1938.  
  1939.  move.l p1_xoff,d0
  1940.  jsr SENDFIRST
  1941.  move.l d0,p2_xoff
  1942.  
  1943.  move.l p1_zoff,d0
  1944.  jsr SENDFIRST
  1945.  move.l d0,p2_zoff 
  1946.  
  1947.  move.l p1_yoff,d0
  1948.  jsr SENDFIRST
  1949.  move.l d0,p2_yoff
  1950.   
  1951.  move.l p1_height,d0
  1952.  jsr SENDFIRST
  1953.  move.l d0,p2_height
  1954.  
  1955.  move.w p1_angpos,d0
  1956.  swap d0
  1957.  move.w p1_bobble,d0
  1958.  jsr SENDFIRST
  1959.  move.w d0,p2_bobble
  1960.  swap d0
  1961.  move.w d0,p2_angpos
  1962.  
  1963.  
  1964.  move.w TempFrames,d0
  1965.  swap d0
  1966.  move.b p1_spctap,d0
  1967.  lsl.w #8,d0
  1968.  move.b p1_clicked,d0
  1969.  jsr SENDFIRST
  1970.  move.b d0,p2_clicked
  1971.  lsr.w #8,d0
  1972.  move.b d0,p2_spctap
  1973.  
  1974.  
  1975.  move.w Rand1,d0
  1976.  swap d0
  1977.  move.b p1_ducked,d0
  1978.  lsl.w #8,d0
  1979.  move.b p1_gunselected,d0
  1980.  jsr SENDFIRST
  1981.  move.b d0,p2_gunselected
  1982.  lsr.w #8,d0
  1983.  move.b d0,p2_ducked
  1984.  
  1985.  move.b p1_fire,d0
  1986.  lsl.w #8,d0
  1987.  move.b MASTERQUITTING,d0
  1988.  or.b d0,SLAVEQUITTING
  1989.  swap d0
  1990.  move.b MASTERPAUSE,d0
  1991.  or.b d0,SLAVEPAUSE
  1992.  jsr SENDFIRST
  1993.  or.b d0,MASTERPAUSE
  1994.  or.b d0,SLAVEPAUSE
  1995.  swap d0
  1996.  or.b d0,SLAVEQUITTING
  1997.  or.b d0,MASTERQUITTING
  1998.  lsr.w #8,d0
  1999.  move.b d0,p2_fire
  2000.  
  2001.  bsr PLR1_Control
  2002.  bsr PLR2_Control
  2003.  move.l PLR1_Roompt,a0
  2004.  move.l ToZoneRoof(a0),SplitHeight
  2005.  move.w p1_xoff,THISPLRxoff
  2006.  move.w p1_zoff,THISPLRzoff
  2007.  
  2008.  bra donetalking
  2009.  
  2010. ASlaveShouldWaitOnHisMaster:
  2011.  
  2012.  move.l #KeyMap,a5
  2013.  tst.b $19(a5)
  2014.  sne SLAVEPAUSE
  2015.  
  2016.  movem.l d0-d7/a0-a6,-(a7)
  2017.  
  2018.  moveq #0,d0
  2019.  move.b GunSelected,d0
  2020.  move.l LINKFILE,a6
  2021.  add.l #GunBulletTypes,a6
  2022.  move.w (a6,d0.w*8),d0
  2023.  
  2024.  move.l #PLAYERTWOAMMO,a6
  2025.  move.w (a6,d0.w*2),d0
  2026.  move.w d0,Ammo
  2027.  movem.l (a7)+,d0-d7/a0-a6
  2028.  
  2029.  move.w PLAYERTWOHEALTH,Energy
  2030.  
  2031.  jsr RECFIRST
  2032.  
  2033.  move.l PLR2s_xoff,p2_xoff
  2034.  move.l PLR2s_zoff,p2_zoff
  2035.  move.l PLR2s_yoff,p2_yoff
  2036.  move.l PLR2s_height,p2_height
  2037.  move.w PLR2s_angpos,p2_angpos
  2038.  move.w PLR2_bobble,p2_bobble
  2039.  move.b PLR2_clicked,p2_clicked
  2040.  clr.b PLR2_clicked
  2041.  move.b PLR2_fire,p2_fire
  2042.  move.b PLR2_SPCTAP,p2_spctap
  2043.  clr.b PLR2_SPCTAP
  2044.  move.b PLR2_Ducked,p2_ducked
  2045.  move.b PLR2_GunSelected,p2_gunselected
  2046.  
  2047.  move.l PLR2_AIMSPD,d0
  2048.  jsr RECFIRST
  2049.  move.l d0,PLR1_AIMSPD
  2050.  
  2051.  move.l p2_xoff,d0
  2052.  jsr RECFIRST
  2053.  move.l d0,p1_xoff
  2054.  
  2055.  move.l p2_zoff,d0
  2056.  jsr RECFIRST
  2057.  move.l d0,p1_zoff
  2058.  
  2059.  move.l p2_yoff,d0
  2060.  jsr RECFIRST
  2061.  move.l d0,p1_yoff
  2062.  
  2063.  move.l p2_height,d0
  2064.  jsr RECFIRST
  2065.  move.l d0,p1_height
  2066.  
  2067.  move.w p2_angpos,d0
  2068.  swap d0
  2069.  move.w p2_bobble,d0
  2070.  jsr RECFIRST
  2071.  move.w d0,p1_bobble
  2072.  swap d0
  2073.  move.w d0,p1_angpos
  2074.  
  2075.  
  2076.  move.b p2_spctap,d0
  2077.  lsl.w #8,d0
  2078.  move.b p2_clicked,d0
  2079.  jsr RECFIRST
  2080.  move.b d0,p1_clicked
  2081.  lsr.w #8,d0
  2082.  move.b d0,p1_spctap
  2083.  swap d0
  2084.  move.w d0,TempFrames
  2085.  
  2086.  move.b p2_ducked,d0
  2087.  lsl.w #8,d0
  2088.  move.b p2_gunselected,d0
  2089.  jsr RECFIRST
  2090.  move.b d0,p1_gunselected
  2091.  lsr.w #8,d0
  2092.  move.b d0,p1_ducked
  2093.  swap d0
  2094.  move.w d0,Rand1
  2095.  
  2096.  move.b p2_fire,d0
  2097.  lsl.w #8,d0
  2098.  move.b SLAVEQUITTING,d0
  2099.  or.b d0,MASTERQUITTING
  2100.  swap d0
  2101.  move.b SLAVEPAUSE,d0
  2102.  or.b d0,MASTERPAUSE
  2103.  jsr RECFIRST
  2104.  or.b d0,MASTERPAUSE
  2105.  or.b d0,SLAVEPAUSE
  2106.  swap d0
  2107.  or.b d0,SLAVEQUITTING
  2108.  or.b d0,MASTERQUITTING
  2109.  lsr.w #8,d0
  2110.  move.b d0,p1_fire
  2111.  
  2112.  
  2113.  bsr PLR1_Control
  2114.  bsr PLR2_Control
  2115.  move.w p2_xoff,THISPLRxoff
  2116.  move.w p2_zoff,THISPLRzoff
  2117.  move.l PLR2_Roompt,a0
  2118.  move.l ToZoneRoof(a0),SplitHeight
  2119.  
  2120. donetalking:
  2121.  
  2122.  
  2123.  move.l #ZoneBrightTable,a1
  2124.  move.l ZoneAdds,a2
  2125.  move.l PLR2_ListOfGraphRooms,a0
  2126. ; move.l PLR2_PointsToRotatePtr,a5
  2127.  move.l a0,a5
  2128.  cmp.b #'s',mors
  2129.  beq.s doallz
  2130.  move.l PLR1_ListOfGraphRooms,a0
  2131. ; move.l PLR1_PointsToRotatePtr,a5
  2132.  move.l a0,a5 
  2133. doallz
  2134.  move.w (a0),d0
  2135.  blt.s doneallz
  2136.  add.w #8,a0
  2137.  
  2138.  move.l (a2,d0.w*4),a3
  2139.  add.l LEVELDATA,a3
  2140.  move.w ToZoneBrightness(a3),d2
  2141.  
  2142.  blt.s justbright
  2143.  move.w d2,d3
  2144.  lsr.w #8,d3
  2145.  tst.b d3
  2146.  beq.s justbright
  2147.  
  2148.  move.l #BrightAnimTable,a4
  2149.  move.w -2(a4,d3.w*2),d2
  2150.  
  2151. justbright:
  2152.  muls #32,d2
  2153.  divs #20,d2
  2154.  move.w d2,(a1,d0.w*4)
  2155.  
  2156.  move.w ToUpperBrightness(a3),d2
  2157.  
  2158.  blt.s justbright2
  2159.  move.w d2,d3
  2160.  lsr.w #8,d3
  2161.  tst.b d3
  2162.  beq.s justbright2
  2163.  
  2164.  move.l #BrightAnimTable,a4
  2165.  move.w -2(a4,d3.w*2),d2
  2166.  
  2167. justbright2:
  2168.  
  2169.  muls #32,d2
  2170.  divs #20,d2
  2171.  move.w d2,2(a1,d0.w*4)
  2172.  
  2173.  bra doallz
  2174.  
  2175. doneallz:
  2176.  
  2177.  move.l PointBrights,a2
  2178.  move.l #CurrentPointBrights,a3
  2179. justtheone:
  2180.  move.w (a5),d0
  2181.  blt whythehell
  2182.  addq #8,a5
  2183.  
  2184.  muls #40,d0
  2185.  
  2186.  move.w #39,d7
  2187.  
  2188. allinzone:
  2189.  move.w (a2,d0.w*2),d2
  2190.  
  2191.  tst.b d2
  2192.  blt.s .justbright
  2193.  move.w d2,d3
  2194.  lsr.w #8,d3
  2195.  tst.b d3
  2196.  beq.s .justbright
  2197.  
  2198.  move.w d3,d4
  2199.  and.w #$f,d3
  2200.  lsr.w #4,d4
  2201.  add.w #1,d4
  2202.  move.l #BrightAnimTable,a0
  2203.  move.w -2(a0,d3.w*2),d3
  2204.  ext.w d2
  2205.  sub.w d2,d3
  2206.  muls d4,d3
  2207.  asr.w #4,d3
  2208.  add.w d3,d2
  2209.  
  2210. .justbright:
  2211.  ext.w d2
  2212.  
  2213.  muls #31,d2
  2214.  divs #20,d2
  2215.  bge.s .itspos
  2216.  sub.w #600,d2
  2217. .itspos:
  2218.  add.w #300,d2
  2219.  
  2220.  move.w d2,(a3,d0.w*2)
  2221.  addq #1,d0
  2222.  dbra d7,allinzone
  2223.  
  2224.  bra justtheone
  2225.  
  2226. whythehell:
  2227.  
  2228.  move.l PLR1_Roompt,a0
  2229.  move.l #CurrentPointBrights,a1
  2230.  move.l ZoneBorderPts,a2
  2231.  move.w (a0),d0
  2232.  muls #10,d0
  2233.  lea (a2,d0.w*2),a2
  2234.  lea (a1,d0.w*8),a1
  2235.  
  2236.  moveq #9,d7
  2237.  moveq #0,d0
  2238.  moveq #0,d1
  2239. findaverage:
  2240.  tst.w (a2)+
  2241.  blt.s .foundaverage
  2242.  addq #1,d0
  2243.  move.w (a1)+,d2
  2244.  bge.s .okpos
  2245.  neg.w d2
  2246. .okpos:
  2247.  add.w d2,d1
  2248.  
  2249.  dbra d7,findaverage
  2250.  
  2251. .foundaverage:
  2252.  
  2253.  ext.l d1
  2254.  divs d0,d1
  2255.  sub.w #300,d1
  2256.  move.w d1,PLR1_RoomBright
  2257.  
  2258.  cmp.b #'n',mors
  2259.  beq nosee
  2260.  
  2261.  move.l PLR1_Roompt,FromRoom
  2262.  move.l PLR2_Roompt,ToRoom
  2263.  move.w p1_xoff,Viewerx
  2264.  move.w p1_zoff,Viewerz
  2265.  move.l p1_yoff,d0
  2266.  asr.l #7,d0
  2267.  move.w d0,Viewery
  2268.  move.w p2_xoff,Targetx
  2269.  move.w p2_zoff,Targetz
  2270.  move.l p2_yoff,d0
  2271.  asr.l #7,d0
  2272.  move.w d0,Targety
  2273.  move.b PLR1_StoodInTop,ViewerTop
  2274.  move.b PLR2_StoodInTop,TargetTop
  2275.  jsr CanItBeSeen
  2276.  
  2277.  move.l PLR1_Obj,a0
  2278.  move.b CanSee,d0
  2279.  and.b #2,d0
  2280.  move.b d0,17(a0)
  2281.  move.l PLR2_Obj,a0
  2282.  move.b CanSee,d0
  2283.  and.b #1,d0
  2284.  move.b d0,17(a0)
  2285.  
  2286. nosee:
  2287.  
  2288.  
  2289.  move.w TempFrames,d0
  2290.  add.w d0,p1_holddown
  2291.  cmp.w #30,p1_holddown
  2292.  blt.s oklength
  2293.  move.w #30,p1_holddown
  2294. oklength:
  2295.  
  2296.  tst.b p1_fire
  2297.  bne.s okstillheld
  2298.  sub.w d0,p1_holddown
  2299.  bge.s okstillheld
  2300.  move.w #0,p1_holddown
  2301.  
  2302. okstillheld:
  2303.  
  2304.  move.w TempFrames,d0
  2305.  add.w d0,p2_holddown
  2306.  
  2307.  cmp.w #30,p2_holddown
  2308.  blt.s oklength2
  2309.  move.w #30,p2_holddown
  2310. oklength2:
  2311.  
  2312.  
  2313.  tst.b p2_fire
  2314.  bne.s okstillheld2
  2315.  sub.w d0,p2_holddown
  2316.  bge.s okstillheld2
  2317.  move.w #0,p2_holddown
  2318. okstillheld2:
  2319.  
  2320. ***** CHECKING LIGHT *********
  2321.  
  2322. ; move.w #-20,d0
  2323. ; move.w PLR1_xoff,d1
  2324. ; move.w PLR1_zoff,d2
  2325. ; move.l PLR1_Roompt,a0
  2326. ; move.w (a0),d3
  2327. ; move.w PLR1_angpos,d4
  2328. ;
  2329. ; jsr BRIGHTENPOINTSANGLE
  2330.  
  2331. ******************************
  2332.  
  2333. ; move.l #PLR1_GunData,a1
  2334. ; move.w p1_holddown,d0
  2335. ; move.w #50,10+32*3(a1)
  2336. ; move.l #PLR2_GunData,a1
  2337. ; move.w p2_holddown,d0
  2338. ; move.w #50,10+32*3(a1)
  2339.  
  2340. ******************************************
  2341. ******************************************
  2342.  
  2343.  move.w TempFrames,d1
  2344.  bgt.s noze
  2345.  moveq #1,d1
  2346. noze:
  2347.  
  2348.  move.w PLR1_xoff,d0
  2349.  sub.w OLDX1,d0
  2350.  asl.w #4,d0
  2351.  ext.l d0
  2352.  divs d1,d0
  2353.  move.w d0,XDIFF1
  2354.  move.w PLR2_xoff,d0
  2355.  sub.w OLDX2,d0
  2356.  asl.w #4,d0
  2357.  ext.l d0
  2358.  divs d1,d0
  2359.  move.w d0,XDIFF2
  2360.  move.w PLR1_zoff,d0
  2361.  sub.w OLDZ1,d0
  2362.  asl.w #4,d0
  2363.  ext.l d0
  2364.  divs d1,d0
  2365.  move.w d0,ZDIFF1
  2366.  move.w PLR2_zoff,d0
  2367.  sub.w OLDZ2,d0
  2368.  asl.w #4,d0
  2369.  ext.l d0
  2370.  divs d1,d0
  2371.  move.w d0,ZDIFF2
  2372.  
  2373.  cmp.b #'s',mors
  2374.  beq.s ImPlayer2OhYesIAm
  2375.  bsr USEPLR1
  2376.  bra IWasPlayer1
  2377.  
  2378. ImPlayer2OhYesIAm:
  2379.  bsr USEPLR2
  2380. IWasPlayer1:
  2381.  
  2382.  
  2383.  cmp.b #'s',mors
  2384.  beq drawplayer2
  2385.  
  2386.  move.w #0,scaleval
  2387.  
  2388.  move.l PLR1_xoff,xoff
  2389.  move.l PLR1_yoff,yoff
  2390.  move.l PLR1_zoff,zoff
  2391.  move.w PLR1_angpos,angpos
  2392.  move.w PLR1_cosval,cosval
  2393.  move.w PLR1_sinval,sinval
  2394.  
  2395.  
  2396.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2397.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2398.  move.l PLR1_Roompt,Roompt
  2399.  
  2400.  move.l #KeyMap,a5
  2401.  moveq #0,d5
  2402.  move.b look_behind_key,d5
  2403.  tst.b (a5,d5.w)
  2404.  beq.s .nolookback
  2405.  
  2406.  move.l PLR1_Obj,a0
  2407.  move.w #-1,12+128(a0)
  2408.  
  2409.  eor.w #4096,angpos 
  2410.  neg.w cosval
  2411.  neg.w sinval
  2412. .nolookback:
  2413.  
  2414.  bsr OrderZones
  2415.  jsr objmoveanim
  2416.  jsr EnergyBar
  2417.  
  2418.  
  2419.  jsr AmmoBar
  2420.  
  2421. ;********************************************
  2422. ;************* Do reflection ****************
  2423. ;
  2424. ; move.l ListOfGraphRooms,a0
  2425. ; move.l ZoneAdds,a1
  2426. ;checkwaterheights
  2427. ; move.w (a0),d0
  2428. ; blt allzonesdone
  2429. ; addq #8,a0
  2430. ; move.l (a1,d0.w*4),a2
  2431. ; add.l LEVELDATA,a2
  2432. ; move.l ToZoneWater(a2),d0
  2433. ; cmp.l ToZoneFloor(a2),d0
  2434. ; blt.s WEHAVEAHEIGHT
  2435. ; bra.s checkwaterheights
  2436. ;
  2437. ;WEHAVEAHEIGHT:
  2438. ;
  2439. ; sub.l yoff,d0
  2440. ; blt.s underwater
  2441. ; add.l d0,d0
  2442. ; add.l d0,yoff
  2443. ; move.l FASTBUFFER2,FASTBUFFER
  2444. ; move.w #0,leftclip
  2445. ; move.w RIGHTX,rightclip
  2446. ; move.w #0,deftopclip
  2447. ; move.w #BOTTOMY/2,defbotclip
  2448. ; move.w #0,topclip
  2449. ; move.w #BOTTOMY/2,botclip
  2450. ;
  2451. ; clr.b DOANYWATER 
  2452. ; bsr DrawDisplay
  2453. ;allzonesdone:
  2454. ;underwater:
  2455.  
  2456. ********************************************
  2457.  
  2458.  st DOANYWATER
  2459.  
  2460.  move.l PLR1_yoff,yoff
  2461.  
  2462.  move.w #0,leftclip
  2463.  move.w RIGHTX,rightclip
  2464.  move.w #0,deftopclip
  2465.  move.w WIDESCRN,d0
  2466.  add.w d0,deftopclip
  2467.  
  2468.  move.w BOTTOMY,defbotclip
  2469.  sub.w d0,defbotclip
  2470.  move.w #0,topclip
  2471.  add.w d0,topclip
  2472.  move.w BOTTOMY,botclip
  2473.  sub.w d0,botclip
  2474. ; sub.l #10*104*4,frompt
  2475. ; sub.l #10*104*4,midpt
  2476.  
  2477. * Subroom loop
  2478.  
  2479.  bsr DrawDisplay 
  2480.  
  2481.  bra nodrawp2
  2482.  
  2483. drawplayer2
  2484.  
  2485.  move.w #0,scaleval
  2486.  move.l PLR2_xoff,xoff
  2487.  move.l PLR2_yoff,yoff
  2488.  move.l PLR2_zoff,zoff
  2489.  move.w PLR2_angpos,angpos
  2490.  move.w PLR2_cosval,cosval
  2491.  move.w PLR2_sinval,sinval 
  2492.  
  2493.  
  2494.  
  2495.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2496.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2497.  move.l PLR2_Roompt,Roompt
  2498.  
  2499.  move.l #KeyMap,a5
  2500.  moveq #0,d5
  2501.  move.b look_behind_key,d5
  2502.  tst.b (a5,d5.w)
  2503.  beq.s .nolookback
  2504.  
  2505.  move.l PLR1_Obj,a0
  2506.  move.w #-1,12+128(a0)
  2507.  eor.w #4096,angpos 
  2508.  
  2509.  neg.w cosval
  2510.  neg.w sinval
  2511. .nolookback:
  2512.  
  2513.  bsr OrderZones
  2514.  jsr objmoveanim
  2515.  jsr EnergyBar
  2516.  jsr AmmoBar
  2517.  
  2518.  move.w WIDESCRN,d0
  2519.  
  2520.  move.w #0,leftclip
  2521.  move.w RIGHTX,rightclip
  2522.  move.w #0,deftopclip
  2523.  add.w d0,deftopclip
  2524.  move.w BOTTOMY,defbotclip
  2525.  sub.w d0,defbotclip
  2526.  move.w #0,topclip
  2527.  add.w d0,topclip
  2528.  move.w BOTTOMY,botclip
  2529.  sub.w d0,botclip
  2530.  
  2531.  bsr DrawDisplay
  2532.  
  2533. nodrawp2:
  2534.  
  2535. ***************************************** 
  2536. * Copy from copbuff to chip ram
  2537.  
  2538.  
  2539. ; move.l drawpt,a3
  2540. ; adda.w #10,a3
  2541. ; move.l COPSCRNBUFF,a2
  2542. ; move.w #2,d6
  2543. ; adda.w #10,a2
  2544. ;COPYOUT
  2545. ; move.w #31,d0
  2546. ;COPYDOWN1:
  2547. ; move.w #3,d1
  2548. ; move.l a2,a4
  2549. ; move.l a3,a5
  2550. ;.inlop1:
  2551. ;val SET 0
  2552. ; REPT 20
  2553. ; move.w val(a4),val(a5)
  2554. ;val SET val+104*4
  2555. ; ENDR
  2556. ; adda.l #104*4*20,a4
  2557. ; adda.l #104*4*20,a5
  2558. ; dbra d1,.inlop1
  2559. ; addq #4,a2
  2560. ; addq #4,a3
  2561. ; dbra d0,COPYDOWN1
  2562. ; addq #4,a2
  2563. ; addq #4,a3
  2564. ; dbra d6,COPYOUT 
  2565.  
  2566.  tst.b REALMAPON
  2567.  beq.s .nomap
  2568.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2569. .nomap
  2570.  
  2571.  move.w WIDESCRN,d7
  2572.  
  2573.  tst.b FULLSCR
  2574.  beq nobigconv
  2575.  
  2576.  move.l FASTBUFFER,a0
  2577. ; add.l #320*2*20,a0
  2578.  move.w d7,d6
  2579.  muls #320,d6
  2580.  add.l d6,a0
  2581.  move.l SCRNDRAWPT,a1
  2582.  move.w d7,d6
  2583.  muls #40,d6
  2584.  add.l d6,a1
  2585.  add.l #2,a1
  2586.  move.l #(288/8)-1,d0
  2587.  move.l #231,d1
  2588.  sub.w d7,d1
  2589.  sub.w d7,d1
  2590.  blt nochunk
  2591.  move.w #(320-288),d2
  2592.  move.w #4,d3
  2593.  
  2594.  bra donebigconv
  2595.  
  2596. nobigconv:
  2597.  
  2598.  move.l FASTBUFFER,a0
  2599.  move.w d7,d6
  2600.  muls #320,d6
  2601.  add.l d6,a0
  2602.  move.l SCRNDRAWPT,a1
  2603.  add.l #8+40*20,a1
  2604.  move.w d7,d6
  2605.  muls #40,d6
  2606.  add.l d6,a1
  2607.  move.l #(192/8)-1,d0
  2608.  move.l #159,d1
  2609.  sub.w d7,d1
  2610.  sub.w d7,d1
  2611.  blt nochunk
  2612.  move.w #(320-192),d2
  2613.  move.w #16,d3
  2614. donebigconv
  2615.  
  2616.  tst.b DOUBLEHEIGHT
  2617.  beq.s .nodoub
  2618.  asr.w #1,d1
  2619.  blt nochunk
  2620.  add.w #320,d2
  2621.  add.w #40,d3
  2622. .nodoub:
  2623.  
  2624.  move.b DOUBLEWIDTH,d4
  2625.  
  2626.  move.b PLR1_TELEPORTED,d5
  2627.  clr.b PLR1_TELEPORTED
  2628.  cmp.b #'s',mors
  2629.  bne.s .notplr2
  2630.  move.b PLR2_TELEPORTED,d5
  2631.  clr.b PLR2_TELEPORTED
  2632. .notplr2
  2633.  jsr CHUNKYTOPLANAR 
  2634.  
  2635. nochunk:
  2636.  
  2637.  move.l #KeyMap,a5
  2638.  tst.b $4a(a5)
  2639.  beq .nosmallscr
  2640.  
  2641.  move.l #0,d7
  2642.  move.l #0,d6
  2643.  tst.b FULLSCR
  2644.  bne.s .attop
  2645.  move.l #40*20,d7
  2646.  move.l #40*52,d6
  2647. .attop:
  2648.  
  2649.  move.w WIDESCRN,d0
  2650.  move.l SCRNDRAWPT,a0
  2651.  add.l d7,a0
  2652.  muls #40,d0
  2653.  add.l d0,a0
  2654.  bsr CLRTWOLINES
  2655.  move.w WIDESCRN,d0
  2656.  move.l SCRNSHOWPT,a0
  2657.  add.l d7,a0
  2658.  muls #40,d0
  2659.  add.l d0,a0
  2660.  bsr CLRTWOLINES
  2661.  
  2662.  add.w #2,WIDESCRN
  2663.  
  2664.  move.l SCRNDRAWPT,a0
  2665.  add.l #232*40,a0
  2666.  sub.l d6,a0
  2667.  move.w WIDESCRN,d0
  2668.  muls #40,d0
  2669.  sub.l d0,a0
  2670.  bsr CLRTWOLINES
  2671.  move.l SCRNSHOWPT,a0
  2672.  sub.l d6,a0
  2673.  add.l #232*40,a0
  2674.  move.w WIDESCRN,d0
  2675.  muls #40,d0
  2676.  sub.l d0,a0
  2677.  bsr CLRTWOLINES
  2678.  
  2679. .nosmallscr
  2680.  
  2681.  tst.b $5e(a5)
  2682.  beq.s .nobigscr
  2683.  tst.w WIDESCRN
  2684.  ble.s .nobigscr
  2685.  
  2686.  sub.w #2,WIDESCRN
  2687.  
  2688. .nobigscr
  2689.  
  2690.  
  2691.  tst.b (a5)
  2692.  beq.s .nosavescrn
  2693.  
  2694.  not.b USEDOUG
  2695.  
  2696.  jsr SAVETHESCREEN
  2697.  
  2698. .nosavescrn:
  2699.  
  2700.  tst.b $5b(a5)
  2701.  beq notdoubheight
  2702.  tst.b LASTDH
  2703.  bne notdoubheight2
  2704.  move.l SCRNSHOWPT,a0
  2705.  jsr WIPEDISPLAY
  2706.  move.l SCRNDRAWPT,a0
  2707.  jsr WIPEDISPLAY
  2708.  st LASTDH 
  2709.  
  2710.  move.w #0,d0
  2711.  move.w #0,d1
  2712.  
  2713.  not.b DOUBLEHEIGHT
  2714.  beq.s singlepixheight
  2715.  move.w #-40,d0
  2716.  move.w #40,d1
  2717.  
  2718. singlepixheight:
  2719.  
  2720.  move.l #SCRMODULOS,a0
  2721.  move.w #115,d2
  2722. putinmode:
  2723.  move.w d0,6(a0)
  2724.  move.w d0,6+4(a0)
  2725.  move.w d1,6+16(a0)
  2726.  move.w d1,6+16+4(a0)
  2727.  add.w #32,a0
  2728.  dbra d2,putinmode
  2729.  
  2730.  bra notdoubheight2
  2731.  
  2732. notdoubheight:
  2733.  clr.b LASTDH
  2734. notdoubheight2
  2735.  
  2736.  tst.b $5a(a5)
  2737.  beq.s notdoubwidth
  2738.  tst.b LASTDW
  2739.  bne notdoubwidth2
  2740.  move.l SCRNSHOWPT,a0
  2741.  jsr WIPEDISPLAY
  2742.  move.l SCRNDRAWPT,a0
  2743.  jsr WIPEDISPLAY
  2744.  st LASTDW
  2745.  not.b DOUBLEWIDTH
  2746.  bra.s notdoubwidth2
  2747.  
  2748. notdoubwidth:
  2749.  clr.b LASTDW
  2750. notdoubwidth2:
  2751.  
  2752. ***************************************** 
  2753.  move.l PLR2_Roompt,a0
  2754.  move.l #WorkSpace,a1
  2755.  clr.l (a1)
  2756.  clr.l 4(a1)
  2757.  clr.l 8(a1)
  2758.  clr.l 12(a1)
  2759.  clr.l 16(a1)
  2760.  clr.l 20(a1)
  2761.  clr.l 24(a1)
  2762.  clr.l 28(a1)
  2763.  
  2764.  cmp.b #'n',mors
  2765.  beq.s plr1only
  2766.  
  2767.  lea ToListOfGraph(a0),a0
  2768. .doallrooms:
  2769.  move.w (a0),d0
  2770.  blt.s .allroomsdone
  2771.  addq #8,a0
  2772.  move.w d0,d1
  2773.  asr.w #3,d0
  2774.  bset d1,(a1,d0.w)
  2775.  bra .doallrooms
  2776. .allroomsdone:
  2777.  
  2778. plr1only:
  2779.  
  2780.  move.l PLR1_Roompt,a0
  2781.  lea ToListOfGraph(a0),a0
  2782. .doallrooms2:
  2783.  move.w (a0),d0
  2784.  blt.s .allroomsdone2
  2785.  addq #8,a0
  2786.  move.w d0,d1
  2787.  asr.w #3,d0
  2788.  bset d1,(a1,d0.w)
  2789.  bra .doallrooms2
  2790. .allroomsdone2:
  2791.  
  2792.  move.l #%000001,d7
  2793.  lea TEAMWORK,a2
  2794.  move.l ObjectData,a0
  2795.  sub.w #64,a0
  2796. .doallobs:
  2797.  add.w #64,a0
  2798.  move.w (a0),d0
  2799.  blt.s .allobsdone
  2800.  move.w 12(a0),d0
  2801.  blt.s .doallobs
  2802.  move.w d0,d1
  2803.  asr.w #3,d0
  2804.  btst d1,(a1,d0.w)
  2805.  bne.s .worryobj
  2806.  move.b 16(a0),d0
  2807.  btst d0,d7
  2808.  beq.s .doallobs
  2809.  moveq #0,d0
  2810.  move.b teamnumber(a0),d0
  2811.  blt.s .doallobs
  2812.  asl.w #4,d0
  2813.  tst.w SEENBY(a2,d0.w)
  2814.  blt.s .doallobs
  2815. .worryobj:
  2816.  or.b #127,worry(a0)
  2817.  bra.s .doallobs
  2818. .allobsdone:
  2819.  
  2820.  
  2821.  
  2822. ; move.l #brightentab,a0
  2823. ; move.l frompt,a3
  2824. ; adda.w #(4*33)+(104*4*20),a3
  2825. ; move.w #20,d7
  2826. ; move.w #20,d6
  2827. ;horl:
  2828. ; move.w d6,d5
  2829. ; move.l a3,a1
  2830. ;vertl
  2831. ; move.w (a1),d0
  2832. ; move.w (a0,d0.w*2),(a1)
  2833. ; addq #4,a1
  2834. ; dbra d5,vertl
  2835. ; adda.w #104*4,a3
  2836. ; dbra d7,horl
  2837.  
  2838.  move.l #$dff000,a6
  2839.  
  2840. ; move.w #$300,col0(a6)
  2841.  
  2842.  move.l #KeyMap,a5
  2843.  tst.b $45(a5)
  2844.  beq.s noend
  2845.  
  2846.  cmp.b #'s',mors
  2847.  beq plr2quit 
  2848.  
  2849.  st MASTERQUITTING
  2850.  bra noend
  2851.  
  2852. plr2quit:
  2853.  st SLAVEQUITTING
  2854. noend:
  2855.  
  2856.  tst.b MASTERQUITTING
  2857.  beq.s .noquit
  2858.  tst.b SLAVEQUITTING
  2859.  beq.s .noquit
  2860.  jmp endnomusic
  2861. .noquit
  2862.  
  2863.  cmp.b #'n',mors
  2864.  bne.s noexit
  2865.  move.l PLR1_Roompt,a0
  2866.  move.w (a0),d0
  2867. ; move.w PLOPT,d1
  2868. ; move.l #ENDZONES,a0
  2869. ; cmp.w (a0,d1.w*2),d0
  2870.  
  2871.  cmp.w ENDZONE,d0
  2872.  
  2873. ; change this for quick exit, charlie
  2874. zzzz:
  2875. ; bra end
  2876.  
  2877.  bne.s noexit
  2878.  jmp end
  2879. noexit:
  2880.  
  2881. ; tst.w PLAYERONEHEALTH
  2882. ; bgt nnoend1
  2883. ; jmp end
  2884. ;nnoend1:
  2885. ; tst.w PLAYERTWOHEALTH
  2886. ; bgt nnoend2
  2887. ; jmp end
  2888. ;nnoend2:
  2889.  
  2890. ; move.l SwitchData,a0
  2891. ; tst.b 24+8(a0)
  2892. ; bne end
  2893.   
  2894. ; JSR STOPTIMER
  2895.  
  2896.  
  2897.  bra lop
  2898.  
  2899.  include "ab3:source_4000/ab3diipatchidr.s"
  2900.  
  2901. CLRTWOLINES:
  2902.  
  2903.  moveq #0,d1
  2904.  move.w #7,d2
  2905. .ccc
  2906.  move.l d1,2(a0)
  2907.  move.l d1,6(a0)
  2908.  move.l d1,10(a0)
  2909.  move.l d1,14(a0)
  2910.  move.l d1,18(a0)
  2911.  move.l d1,22(a0)
  2912.  move.l d1,26(a0)
  2913.  move.l d1,30(a0)
  2914.  move.l d1,34(a0)
  2915.  move.l d1,2+40(a0)
  2916.  move.l d1,6+40(a0)
  2917.  move.l d1,10+40(a0)
  2918.  move.l d1,14+40(a0)
  2919.  move.l d1,18+40(a0)
  2920.  move.l d1,22+40(a0)
  2921.  move.l d1,26+40(a0)
  2922.  move.l d1,30+40(a0)
  2923.  move.l d1,34+40(a0)
  2924.  add.l #10240,a0
  2925.  dbra d2,.ccc
  2926.  rts
  2927.  
  2928.  
  2929. LASTDH: dc.b 0
  2930. LASTDW: dc.b 0
  2931. WIDESCRN: dc.w 0
  2932. TRRANS: dc.w 0
  2933. DOANYWATER: dc.w 0
  2934.  
  2935. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2936.  
  2937.  move.l #SHADINGTABLE,a4
  2938. ; add.w MAPBRIGHT,a4
  2939.  
  2940.  move.l #KeyMap,a5
  2941.  tst.b $50(a5)
  2942.  beq.s .nobrighter
  2943.  tst.w MAPBRIGHT
  2944.  beq.s .nobrighter
  2945.  
  2946.  sub.w #1,MAPBRIGHT
  2947.  
  2948. .nobrighter:
  2949.  
  2950.  tst.b $51(a5)
  2951.  beq.s .nodimmer
  2952.  cmp.w #7,MAPBRIGHT
  2953.  bge.s .nodimmer
  2954.  
  2955.  add.w #1,MAPBRIGHT
  2956.  
  2957. .nodimmer:
  2958.  
  2959.  move.l #Rotated,a1
  2960.  move.l #COMPACTMAP,a2
  2961.  move.l #BIGMAP-40,a3
  2962.  
  2963. preshow:
  2964.  add.w #40,a3
  2965.  
  2966. SHOWMAP:
  2967.  move.l (a2)+,d5
  2968.  move.l a2,d7
  2969.  cmp.l LASTZONE,d7
  2970.  bgt shownmap
  2971.  
  2972.  tst.l d5
  2973.  beq.s preshow
  2974.  
  2975.  move.w #9,d7
  2976. wallsofzone
  2977.  
  2978.  asr.l #1,d5
  2979.  bcs.s WALLSEEN
  2980.  
  2981.  asr.l #1,d5
  2982.  bcs.s WALLMAPPED
  2983.  
  2984.  asr.l #1,d5
  2985.  addq #4,a3
  2986.  bra.s DECIDEDWALL
  2987.  
  2988. WALLMAPPED:
  2989.  move.w #$b00,d4
  2990.  asr.l #1,d5
  2991.  bcc.s .notadoor
  2992.  move.w #$e00,d4
  2993. .notadoor
  2994.  
  2995.  st TRRANS
  2996.  
  2997.  bra.s DECIDEDCOLOUR
  2998.  
  2999. WALLSEEN:
  3000.  
  3001.  clr.b TRRANS
  3002.  
  3003.  move.w #255,d4
  3004.  asr.l #2,d5
  3005.  bcc.s .notadoor
  3006.  move.w #254,d4
  3007. .notadoor
  3008. DECIDEDCOLOUR:
  3009.  move.w (a3)+,d6
  3010.  move.l (a1,d6.w*8),d0
  3011.  asr.l #7,d0
  3012.  add.w mapxoff,d0
  3013.  move.w 6(a1,d6.w*8),d1
  3014.  add.w mapzoff,d1
  3015.  move.w (a3)+,d6
  3016.  move.l (a1,d6.w*8),d2
  3017.  asr.l #7,d2
  3018.  add.w mapxoff,d2
  3019.  move.w 6(a1,d6.w*8),d3
  3020.  add.w mapzoff,d3
  3021.  
  3022.  neg.w d1
  3023.  neg.w d3
  3024.  
  3025.  movem.l d7/d5,-(a7)
  3026.  bsr CLIPANDDRAW
  3027.  movem.l (a7)+,d7/d5
  3028.  
  3029. DECIDEDWALL:
  3030.  
  3031.  dbra d7,wallsofzone
  3032.  bra SHOWMAP
  3033.  
  3034. shownmap:
  3035.  
  3036.  clr.b TRRANS
  3037.  
  3038.  move.w mapxoff,d0
  3039.  move.w mapzoff,d1
  3040.  neg.w d1
  3041.  move.w d0,d2
  3042.  move.w d1,d3
  3043.  sub.w #128,d1
  3044.  add.w #128,d3
  3045.  move.w #250,d4
  3046.  bsr CLIPANDDRAW
  3047.  
  3048.  move.w mapxoff,d0
  3049.  move.w mapzoff,d1
  3050.  neg.w d1
  3051.  move.w d0,d2
  3052.  move.w d1,d3
  3053.  sub.w #128,d1
  3054.  sub.w #32,d3
  3055.  sub.w #64,d2
  3056.  move.w #250,d4
  3057.  bsr CLIPANDDRAW
  3058.  
  3059.  move.w mapxoff,d0
  3060.  move.w mapzoff,d1
  3061.  neg.w d1
  3062.  move.w d0,d2
  3063.  move.w d1,d3
  3064.  sub.w #128,d1
  3065.  sub.w #32,d3
  3066.  add.w #64,d2
  3067.  move.w #250,d4
  3068.  bsr CLIPANDDRAW
  3069.  rts
  3070.  
  3071.  
  3072. CLIPANDDRAW:
  3073.  
  3074.  tst.b FULLSCR
  3075.  beq.s .nodov
  3076.  
  3077.  add.w d0,d0
  3078.  add.w d2,d2
  3079.  ext.l d0
  3080.  ext.l d2
  3081.  divs #3,d0
  3082.  divs #3,d2
  3083.  
  3084. .nodov:
  3085.  
  3086.  move.w MAPBRIGHT,d5
  3087.  asr.w d5,d0
  3088.  asr.w d5,d1
  3089.  asr.w d5,d2
  3090.  asr.w d5,d3
  3091.  
  3092. NOSCALING:
  3093.  add.w #96,d0
  3094.  bge p1xpos
  3095.  
  3096.  add.w #96,d2
  3097.  blt OFFSCREEN
  3098.  
  3099. x1nx2p:
  3100.  
  3101.  move.w d3,d5
  3102.  sub.w d1,d5
  3103.  move.w d2,d6
  3104.  sub.w d0,d6
  3105.  beq OFFSCREEN
  3106.  
  3107.  muls d0,d5
  3108.  divs d6,d5
  3109.  sub.w d5,d1
  3110.  move.w #0,d0
  3111.  
  3112.  bra doneleftclip
  3113.  
  3114. p1xpos:
  3115.  
  3116.  add.w #96,d2
  3117.  bge doneleftclip
  3118.  
  3119.  move.w d1,d5
  3120.  sub.w d3,d5
  3121.  move.w d0,d6
  3122.  sub.w d2,d6
  3123.  beq OFFSCREEN
  3124.  
  3125.  muls d2,d5
  3126.  divs d6,d5
  3127.  sub.w d5,d3
  3128.  move.w #0,d2
  3129.  
  3130. doneleftclip:
  3131.  
  3132.  cmp.w #191,d0
  3133.  ble p1xneg
  3134.  
  3135.  cmp.w #191,d2
  3136.  bgt OFFSCREEN
  3137.  
  3138.  move.w d0,d6
  3139.  sub.w d2,d6
  3140.  beq OFFSCREEN
  3141.  sub.w #191,d0
  3142.  move.w d3,d5
  3143.  sub.w d1,d5
  3144.  
  3145.  muls d5,d0
  3146.  divs d6,d0
  3147.  add.w d0,d1
  3148.  move.w #191,d0
  3149.  
  3150.  bra donerightclip
  3151.  
  3152. p1xneg:
  3153.  
  3154.  cmp.w #191,d2
  3155.  ble donerightclip
  3156.  
  3157.  move.w d2,d6
  3158.  sub.w d0,d6
  3159.  beq OFFSCREEN
  3160.  sub.w #191,d2
  3161.  move.w d1,d5
  3162.  sub.w d3,d5
  3163.  
  3164.  muls d5,d2
  3165.  divs d6,d2
  3166.  add.w d2,d3
  3167.  move.w #191,d2
  3168.  
  3169. donerightclip:
  3170.  
  3171. *********************************
  3172.  
  3173.  add.w #80,d1
  3174.  bge p1ypos
  3175.  
  3176.  add.w #80,d3
  3177.  blt OFFSCREEN
  3178.  
  3179.  move.w d2,d5
  3180.  sub.w d0,d5
  3181.  move.w d3,d6
  3182.  sub.w d1,d6
  3183.  beq OFFSCREEN
  3184.  
  3185.  muls d1,d5
  3186.  divs d6,d5
  3187.  sub.w d5,d0
  3188.  move.w #0,d1
  3189.  
  3190.  bra donetopclip
  3191.  
  3192. p1ypos:
  3193.  
  3194.  add.w #80,d3
  3195.  bge donetopclip
  3196.  
  3197.  move.w d0,d5
  3198.  sub.w d2,d5
  3199.  move.w d1,d6
  3200.  sub.w d3,d6
  3201.  beq OFFSCREEN
  3202.  
  3203.  muls d3,d5
  3204.  divs d6,d5
  3205.  sub.w d5,d2
  3206.  move.w #0,d3
  3207.  
  3208. donetopclip:
  3209.  
  3210.  cmp.w #159,d1
  3211.  ble p1yneg
  3212.  
  3213.  cmp.w #159,d3
  3214.  bgt OFFSCREEN
  3215.  
  3216.  move.w d1,d6
  3217.  sub.w d3,d6
  3218.  beq OFFSCREEN
  3219.  sub.w #159,d1
  3220.  move.w d2,d5
  3221.  sub.w d0,d5
  3222.  
  3223.  muls d5,d1
  3224.  divs d6,d1
  3225.  add.w d1,d0
  3226.  move.w #159,d1
  3227.  
  3228.  bra donebotclip
  3229.  
  3230. p1yneg:
  3231.  
  3232.  cmp.w #159,d3
  3233.  ble donebotclip
  3234.  
  3235.  move.w d3,d6
  3236.  sub.w d1,d6
  3237.  beq OFFSCREEN
  3238.  sub.w #159,d3
  3239.  move.w d0,d5
  3240.  sub.w d2,d5
  3241.  
  3242.  muls d5,d3
  3243.  divs d6,d3
  3244.  add.w d3,d2
  3245.  move.w #159,d3
  3246.  
  3247. donebotclip:
  3248.  
  3249.  tst.b TRRANS
  3250.  bne DRAWAtransLINE
  3251.  bra DRAWAMAPLINE
  3252.  
  3253. OFFSCREEN:
  3254. NOLINEtrans:
  3255.  rts
  3256.  
  3257. MAPBRIGHT:
  3258.  dc.w 3
  3259. mapxoff: dc.w 0
  3260. mapzoff: dc.w 0
  3261.  
  3262. DRAWAtransLINE:
  3263.  
  3264.  move.l FASTBUFFER,a0    ; screen to render to.
  3265.  
  3266.  tst.b FULLSCR
  3267.  beq.s .nooffset
  3268.   
  3269.  add.l #(320*40)+(48*2),a0
  3270.   
  3271. .nooffset:
  3272.  
  3273.  cmp.w d1,d3
  3274.  bgt.s .okdown
  3275.  bne.s .aline
  3276.  cmp.w d0,d2
  3277.  beq.s NOLINEtrans 
  3278. .aline
  3279.  exg d0,d2
  3280.  exg d1,d3
  3281. .okdown
  3282.  
  3283.  move.w d1,d5
  3284.  muls #320,d5
  3285.  add.l d5,a0
  3286.  lea (a0,d0.w*2),a0
  3287.  
  3288.  sub.w d1,d3
  3289.  
  3290.  sub.w d0,d2
  3291.  bge.s downrighttrans
  3292.  
  3293. downlefttrans:
  3294.  neg.w d2
  3295.  cmp.w d2,d3
  3296.  bgt.s downmorelefttrans
  3297.  
  3298. downleftmoretrans:
  3299.  move.w #320,d6
  3300.  move.w d2,d0
  3301.  move.w d2,d7
  3302.  
  3303. .linelop:
  3304.  move.b (a0),d4
  3305.  move.b (a4,d4.w*2),(a0)
  3306.  subq #1,a0
  3307.  sub.w d3,d0
  3308.  bgt.s .noextra
  3309.  add.w d2,d0
  3310.  add.w d6,a0
  3311. .noextra:
  3312.  dbra d7,.linelop
  3313.  rts
  3314.  
  3315. downmorelefttrans:
  3316.  move.w #320,d6
  3317.  move.w d3,d0
  3318.  move.w d3,d7
  3319.  
  3320. .linelop:
  3321.  move.b (a0),d4
  3322.  move.b (a4,d4.w*2),(a0)
  3323.  add.w d6,a0
  3324.  sub.w d2,d0
  3325.  bgt.s .noextra
  3326.  add.w d3,d0
  3327.  subq #1,a0
  3328. .noextra:
  3329.  dbra d7,.linelop
  3330.  
  3331.  rts
  3332.  
  3333. downrighttrans:
  3334.  
  3335.  cmp.w d2,d3
  3336.  bgt.s downmorerighttrans
  3337.  
  3338. downrightmoretrans:
  3339.  move.w #320,d6
  3340.  move.w d2,d0
  3341.  move.w d2,d7
  3342.  
  3343. .linelop:
  3344.  move.b (a0),d4
  3345.  move.b (a4,d4.w*2),(a0)+
  3346.  sub.w d3,d0
  3347.  bgt.s .noextra
  3348.  add.w d2,d0
  3349.  add.w d6,a0
  3350. .noextra:
  3351.  dbra d7,.linelop
  3352.  
  3353.  rts
  3354.  
  3355. downmorerighttrans:
  3356.  move.w #320,d6
  3357.  move.w d3,d0
  3358.  move.w d3,d7
  3359.  
  3360. .linelop:
  3361.  move.b (a0),d4
  3362.  move.b (a4,d4.w*2),(a0)
  3363.  add.w d6,a0
  3364.  sub.w d2,d0
  3365.  bgt.s .noextra
  3366.  add.w d3,d0
  3367.  addq #1,a0
  3368. .noextra:
  3369.  dbra d7,.linelop
  3370.  
  3371.  rts
  3372.  
  3373. NOLINE:
  3374.  rts
  3375.  
  3376. DRAWAMAPLINE:
  3377.  
  3378.  
  3379.  move.l FASTBUFFER,a0    ; screen to render to.
  3380.  cmp.w d1,d3
  3381.  bgt.s .okdown
  3382.  bne.s .aline
  3383.  cmp.w d0,d2
  3384.  beq.s NOLINE 
  3385. .aline
  3386.  exg d0,d2
  3387.  exg d1,d3
  3388. .okdown
  3389.  
  3390.  move.w d1,d5
  3391.  muls #320,d5
  3392.  add.l d5,a0
  3393.  lea (a0,d0.w),a0
  3394.  
  3395.  sub.w d1,d3
  3396.  
  3397.  sub.w d0,d2
  3398.  bge.s downright
  3399.  
  3400. downleft:
  3401.  neg.w d2
  3402.  cmp.w d2,d3
  3403.  bgt.s downmoreleft
  3404.  
  3405. downleftmore:
  3406.  move.w #320,d6
  3407.  move.w d2,d0
  3408.  move.w d2,d7
  3409.  addq #1,a0
  3410.  
  3411. .linelop:
  3412.  move.b d4,-(a0)
  3413.  sub.w d3,d0
  3414.  bgt.s .noextra
  3415.  add.w d2,d0
  3416.  add.w d6,a0
  3417. .noextra:
  3418.  dbra d7,.linelop
  3419.  rts
  3420.  
  3421. downmoreleft:
  3422.  move.w #320,d6
  3423.  move.w d3,d0
  3424.  move.w d3,d7
  3425.  
  3426. .linelop:
  3427.  move.b d4,(a0)
  3428.  add.w d6,a0
  3429.  sub.w d2,d0
  3430.  bgt.s .noextra
  3431.  add.w d3,d0
  3432.  subq #1,a0
  3433. .noextra:
  3434.  dbra d7,.linelop
  3435.  
  3436.  rts
  3437.  
  3438. downright:
  3439.  
  3440.  cmp.w d2,d3
  3441.  bgt.s downmoreright
  3442.  
  3443. downrightmore:
  3444.  move.w #320,d6
  3445.  move.w d2,d0
  3446.  move.w d2,d7
  3447.  
  3448. .linelop:
  3449.  move.b d4,(a0)+
  3450.  sub.w d3,d0
  3451.  bgt.s .noextra
  3452.  add.w d2,d0
  3453.  add.w d6,a0
  3454. .noextra:
  3455.  dbra d7,.linelop
  3456.  
  3457.  rts
  3458.  
  3459. downmoreright:
  3460.  move.w #320,d6
  3461.  move.w d3,d0
  3462.  move.w d3,d7
  3463.  
  3464. .linelop:
  3465.  move.b d4,(a0)
  3466.  add.w d6,a0
  3467.  sub.w d2,d0
  3468.  bgt.s .noextra
  3469.  add.w d3,d0
  3470.  addq #1,a0
  3471. .noextra:
  3472.  dbra d7,.linelop
  3473.  
  3474.  rts
  3475.  
  3476. SAVETHESCREEN:
  3477.  
  3478.  move.l old,$dff080
  3479.  move.w #$8020,$dff000+intena
  3480.  
  3481.  move.l _IntuitionBase,a6
  3482.  jsr _LVORethinkDisplay(a6)
  3483.  
  3484.  move.l doslib,a6
  3485.  move.l #SAVENAME,d1
  3486.  move.l #1006,d2
  3487.  jsr -30(a6)
  3488.  move.l d0,handle
  3489.  
  3490.  move.l doslib,a6
  3491.  move.l #mt_init,d2
  3492.  move.l handle,d1
  3493.  move.l #10240*8,d3
  3494.  jsr _LVOWrite(a6)
  3495.  
  3496.  move.l doslib,a6
  3497.  move.l handle,d1
  3498.  jsr -36(a6)
  3499.  
  3500.  move.l doslib,a6
  3501.  move.l #200,d1
  3502.  jsr -198(a6) 
  3503.  
  3504.  move.w #$0020,$dff000+intena
  3505.  move.l #bigfield,$dff080
  3506.  
  3507.  add.b #1,SAVELETTER
  3508.  
  3509.  rts
  3510.  
  3511. SAVENAME: dc.b 'work:rawscrn'
  3512. SAVELETTER: dc.b 'd',0
  3513.  
  3514.  even
  3515.  
  3516.  include "ab3:source_4000/CHUNKY.s"
  3517.  
  3518.  
  3519. MASTERQUITTING: dc.b 0
  3520. SLAVEQUITTING: dc.b 0
  3521. MASTERPAUSE: dc.b 0
  3522. SLAVEPAUSE: dc.b 0
  3523.  
  3524. PAUSEOPTS:
  3525.  include "ab3:source_4000/pauseopts"
  3526.  
  3527. ENDZONE: dc.w 0
  3528.  
  3529. ENDZONES:
  3530. ; LEVEL 1
  3531.  dc.w -1
  3532. ; dc.w 55
  3533. ; LEVEL 2
  3534.  dc.w 149
  3535. ; LEVEL 3
  3536.  dc.w 155
  3537. ; LEVEL 4
  3538.  dc.w 107
  3539. ; LEVEL 5
  3540.  dc.w 67
  3541. ; LEVEL 6
  3542.  dc.w 132
  3543. ; LEVEL 7
  3544.  dc.w 203
  3545. ; LEVEL 8
  3546.  dc.w 166
  3547. ; LEVEL 9
  3548.  dc.w 118
  3549. ; LEVEL 10
  3550.  dc.w 102
  3551. ; LEVEL 11
  3552.  dc.w 103
  3553. ; LEVEL 12
  3554.  dc.w 2
  3555. ; LEVEL 13
  3556.  dc.w 98
  3557. ; LEVEL 14
  3558.  dc.w 0
  3559. ; LEVEL 15
  3560.  dc.w 148
  3561. ; LEVEL 16
  3562.  dc.w 103
  3563.  
  3564. ***************************************************************************
  3565. ***************************************************************************
  3566. ****************** End of Main Loop here ********************************** 
  3567. ***************************************************************************
  3568. ***************************************************************************
  3569.  
  3570. putinsmallscr:
  3571.  
  3572.  rts
  3573.  
  3574.  move.l #$1fe0000,statskip
  3575.  move.l #$1fe0000,statskip+4
  3576.  
  3577.  move.l #healthpal,a5
  3578. ; move.l COPSCRN1,a0
  3579. ; move.l COPSCRN2,a2
  3580.  move.w #scrheight-1,d0
  3581.  move.l #0,d6
  3582.  move.w #0,d3
  3583.  move.w #$2bdf,startwait
  3584.  move.w #$2d01,endwait
  3585. .fillcop
  3586.  move.w #$180,d1
  3587.  
  3588.  move.l a0,a1
  3589.  move.l a2,a3
  3590.  move.w #$10c,(a1)+
  3591.  move.w #$10c,(a3)+
  3592.  move.w d3,(a1)+
  3593.  move.w d3,(a3)+
  3594.  eor.w #$8000,d3
  3595.  
  3596.  move.w #$106,(a1)+
  3597.  move.w #$106,(a3)+
  3598.  move.w #$2c42,d5
  3599.  or.w d3,d5
  3600.  and.w #$fffe,d5
  3601.  move.w d5,(a1)+
  3602.  move.w d5,(a3)+
  3603.  bsr do32
  3604.  
  3605.  move.w #$106,(a1)+
  3606.  move.w #$106,(a3)+
  3607.  move.w #$4c42,d5
  3608.  or.w d3,d5
  3609.  and.w #$fffe,d5
  3610.  move.w d5,(a1)+
  3611.  move.w d5,(a3)+
  3612.  bsr do32
  3613.  
  3614.  move.w #$106,(a1)+
  3615.  move.w #$106,(a3)+
  3616.  move.w #$6c42,d5
  3617.  or.w d3,d5
  3618.  and.w #$fffe,d5
  3619.  move.w d5,(a1)+
  3620.  move.w d5,(a3)+
  3621.  bsr do32
  3622.  
  3623.  
  3624.  move.l #$1060c42,(a1)+
  3625.  move.l #$1060c42,(a3)+
  3626.  move.w #$19e,(a1)+
  3627.  move.w (a5),(a1)+
  3628.  move.w #$19e,(a3)+
  3629.  move.w (a5)+,(a3)+
  3630.  
  3631. **********************************
  3632.  
  3633.  adda.w #104*4,a0
  3634.  adda.w #104*4,a2
  3635.  dbra d0,.fillcop
  3636.  
  3637.  move.w #$48,fetchstart
  3638.  move.w #$88,fetchstop
  3639.  move.w #$2cb1,winstart
  3640.  move.w #$2c91,winstop
  3641.  move.w #-24,modulo
  3642.  move.w #-24,modulo+4
  3643.  
  3644.  move.l #nullspr,d0
  3645.  move.w d0,s4l
  3646.  move.w d0,s5l
  3647.  move.w d0,s6l
  3648.  move.w d0,s7l
  3649.  swap d0
  3650.  move.w d0,s4h
  3651.  move.w d0,s5h
  3652.  move.w d0,s6h
  3653.  move.w d0,s7h 
  3654.  
  3655. ; move.l #borders,d0
  3656. ; move.w d0,s0l
  3657. ; swap d0
  3658. ; move.w d0,s0h
  3659. ; move.l #borders+2592,d0
  3660. ; move.w d0,s1l
  3661. ; swap d0
  3662. ; move.w d0,s1h
  3663. ; move.l #borders+2592*2,d0
  3664. ; move.w d0,s2l
  3665. ; swap d0
  3666. ; move.w d0,s2h
  3667. ; move.l #borders+2592*3,d0
  3668. ; move.w d0,s3l
  3669. ; swap d0
  3670. ; move.w d0,s3h
  3671.  
  3672.  
  3673.  move.l scrn,a0
  3674.  add.l #40,a0
  3675.  move.l scrn,a1
  3676.  add.l #160,a1
  3677.  move.l scrn,a2
  3678.  add.l #280,a2
  3679.  move.l #smallscrntab,a3
  3680.  move.w #191,d7    ; counter
  3681.  move.w #0,d1    ; xpos
  3682. .plotscrnloop:
  3683.  move.b (a3)+,d0
  3684.  move.w d1,d2
  3685.  asr.w #3,d2
  3686.  move.b d1,d3
  3687.  not.b d3
  3688.  bclr.b d3,-40(a0,d2.w)
  3689.  bclr.b d3,(a0,d2.w)
  3690.  bclr.b d3,40(a0,d2.w)
  3691.  bclr.b d3,-40(a1,d2.w)
  3692.  bclr.b d3,(a1,d2.w)
  3693.  bclr.b d3,40(a1,d2.w)
  3694.  bclr.b d3,-40(a2,d2.w)
  3695.  btst #0,d0
  3696.  beq.s .nobp1
  3697.  bset.b d3,-40(a0,d2.w)
  3698. .nobp1:
  3699.  btst #1,d0
  3700.  beq.s .nobp2
  3701.  bset.b d3,(a0,d2.w)
  3702. .nobp2:
  3703.  btst #2,d0
  3704.  beq.s .nobp3
  3705.  bset.b d3,40(a0,d2.w)
  3706. .nobp3:
  3707.  btst #3,d0
  3708.  beq.s .nobp4
  3709.  bset.b d3,-40(a1,d2.w)
  3710. .nobp4:
  3711.  btst #4,d0
  3712.  beq.s .nobp5
  3713.  bset.b d3,(a1,d2.w)
  3714. .nobp5:
  3715.  btst #5,d0
  3716.  beq.s .nobp6
  3717.  bset.b d3,40(a1,d2.w)
  3718. .nobp6:
  3719.  btst #6,d0
  3720.  beq.s .nobp7
  3721.  bset.b d3,-40(a2,d2.w)
  3722. .nobp7:
  3723.  
  3724.  addq #1,d1
  3725.  
  3726.  dbra d7,.plotscrnloop
  3727.  
  3728.  
  3729.  rts
  3730.  
  3731. putinlargescr:
  3732.  
  3733.  move.l #$1000000,statskip
  3734.  move.l #$fffffffe,statskip+4
  3735.  
  3736.  move.l #healthpal,a5
  3737. ; move.l COPSCRN1,a0
  3738. ; move.l COPSCRN2,a2
  3739.  move.w #scrheight-1,d0
  3740.  move.l #0,d6
  3741.  move.w #0,d3
  3742.  move.w #$29df,startwait
  3743.  move.w #$2b01,endwait
  3744. .fillcop
  3745.  move.w #$180,d1
  3746.  
  3747.  move.l a0,a1
  3748.  move.l a2,a3
  3749.  move.w #$10c,(a1)+
  3750.  move.w #$10c,(a3)+
  3751.  move.w d3,(a1)+
  3752.  move.w d3,(a3)+
  3753.  eor.w #$8000,d3
  3754.  
  3755.  move.w #$106,(a1)+
  3756.  move.w #$106,(a3)+
  3757.  move.w #$2c42,d5
  3758.  or.w d3,d5
  3759.  and.w #$fffe,d5
  3760.  move.w d5,(a1)+
  3761.  move.w d5,(a3)+
  3762.  bsr do32
  3763.  
  3764.  move.w #$106,(a1)+
  3765.  move.w #$106,(a3)+
  3766.  move.w #$4c42,d5
  3767.  or.w d3,d5
  3768.  and.w #$fffe,d5
  3769.  move.w d5,(a1)+
  3770.  move.w d5,(a3)+
  3771.  bsr do32
  3772.  
  3773.  move.w #$106,(a1)+
  3774.  move.w #$106,(a3)+
  3775.  move.w #$6c42,d5
  3776.  or.w d3,d5
  3777.  and.w #$fffe,d5
  3778.  move.w d5,(a1)+
  3779.  move.w d5,(a3)+
  3780.  bsr do32
  3781.  
  3782.  move.w startwait,(a1)+
  3783.  move.w #$fffe,(a1)+
  3784.  move.w endwait,(a1)+
  3785.  move.w #$ff00,(a1)+
  3786.  move.w startwait,(a3)+
  3787.  move.w #$fffe,(a3)+
  3788.  move.w endwait,(a3)+
  3789.  move.w #$ff00,(a3)+
  3790.  
  3791. ; move.l $1fe0000,(a1)+
  3792. ; move.l $1fe0000,(a3)+
  3793. ; move.l $1fe0000,(a1)+
  3794. ; move.l $1fe0000,(a3)+
  3795.  
  3796.  
  3797.  add.w #$300,startwait
  3798.  add.w #$300,endwait
  3799.  
  3800. ; move.l #$1060c42,(a1)+
  3801. ; move.l #$1060c42,(a3)+
  3802. ; move.w #$19e,(a1)+
  3803. ; move.w (a5),(a1)+
  3804. ; move.w #$19e,(a3)+
  3805. ; move.w (a5)+,(a3)+
  3806.  
  3807. **********************************
  3808.  
  3809.  adda.w #104*4,a0
  3810.  adda.w #104*4,a2
  3811.  dbra d0,.fillcop
  3812.  
  3813.  move.w #$38,fetchstart
  3814.  move.w #$b8,fetchstop
  3815.  move.w #$2c81,winstart
  3816.  move.w #$2cc1,winstop
  3817.  move.w #-40,modulo
  3818.  move.w #-40,modulo+4
  3819.  
  3820.  move.l #nullspr,d0
  3821.  move.w d0,s0l
  3822.  move.w d0,s1l
  3823.  move.w d0,s2l
  3824.  move.w d0,s3l
  3825.  move.w d0,s4l
  3826.  move.w d0,s5l
  3827.  move.w d0,s6l
  3828.  move.w d0,s7l
  3829.  swap d0
  3830.  move.w d0,s0h
  3831.  move.w d0,s1h
  3832.  move.w d0,s2h
  3833.  move.w d0,s3h
  3834.  move.w d0,s4h
  3835.  move.w d0,s5h
  3836.  move.w d0,s6h
  3837.  move.w d0,s7h 
  3838.  
  3839.  move.l scrn,a0
  3840.  move.l a0,a1
  3841.  move.l a0,a2
  3842.  add.l #40,a0
  3843.  add.l #160,a1
  3844.  add.l #280,a2
  3845.  move.l #scrntab,a3
  3846.  move.w #319,d7    ; counter
  3847.  move.w #0,d1    ; xpos
  3848. .plotscrnloop:
  3849.  move.b (a3)+,d0
  3850.  move.w d1,d2
  3851.  asr.w #3,d2
  3852.  move.b d1,d3
  3853.  not.b d3
  3854.  bclr.b d3,-40(a0,d2.w)
  3855.  bclr.b d3,(a0,d2.w)
  3856.  bclr.b d3,40(a0,d2.w)
  3857.  bclr.b d3,-40(a1,d2.w)
  3858.  bclr.b d3,(a1,d2.w)
  3859.  bclr.b d3,40(a1,d2.w)
  3860.  bclr.b d3,-40(a2,d2.w)
  3861.  btst #0,d0
  3862.  beq.s .nobp1
  3863.  bset.b d3,-40(a0,d2.w)
  3864. .nobp1:
  3865.  btst #1,d0
  3866.  beq.s .nobp2
  3867.  bset.b d3,(a0,d2.w)
  3868. .nobp2:
  3869.  btst #2,d0
  3870.  beq.s .nobp3
  3871.  bset.b d3,40(a0,d2.w)
  3872. .nobp3:
  3873.  btst #3,d0
  3874.  beq.s .nobp4
  3875.  bset.b d3,-40(a1,d2.w)
  3876. .nobp4:
  3877.  btst #4,d0
  3878.  beq.s .nobp5
  3879.  bset.b d3,(a1,d2.w)
  3880. .nobp5:
  3881.  btst #5,d0
  3882.  beq.s .nobp6
  3883.  bset.b d3,40(a1,d2.w)
  3884. .nobp6:
  3885.  btst #6,d0
  3886.  beq.s .nobp7
  3887.  bset.b d3,-40(a2,d2.w)
  3888. .nobp7:
  3889.  
  3890.  addq #1,d1
  3891.  
  3892.  dbra d7,.plotscrnloop
  3893.  
  3894.  rts
  3895.  
  3896. CLEARKEYBOARD:
  3897.  move.l #KeyMap,a5
  3898.  moveq #0,d0
  3899.  move.w #15,d1
  3900. clrloo:
  3901.  move.l d0,(a5)+
  3902.  move.l d0,(a5)+
  3903.  move.l d0,(a5)+
  3904.  move.l d0,(a5)+
  3905.  dbra d1,clrloo
  3906.  rts
  3907.  
  3908. READCONTROLS: dc.w 0
  3909.  
  3910. tstststst: dc.w 0
  3911.  
  3912. BollocksRoom:
  3913.  dc.w -1
  3914.  ds.l 50
  3915.  
  3916. GUNYOFFS:
  3917.  dc.w 20
  3918.  dc.w 20
  3919.  dc.w 0
  3920.  dc.w 20
  3921.  dc.w 20
  3922.  dc.w 0
  3923.  dc.w 0
  3924.  dc.w 20
  3925.  
  3926. PLR1_BOBBLEY: dc.l 0
  3927. PLR2_BOBBLEY: dc.l 0
  3928.  
  3929. USEPLR1:
  3930.  
  3931. ***********************************
  3932.  
  3933.  move.l PLR1_Obj,a0 
  3934.  move.b #4,16(a0)
  3935.  move.l ObjectPoints,a1
  3936.  move.l #ObjRotated,a2
  3937.  move.w (a0),d0
  3938.  move.l PLR1_xoff,(a1,d0.w*8)
  3939.  move.l PLR1_zoff,4(a1,d0.w*8)
  3940.  move.l PLR1_Roompt,a1
  3941.  
  3942.  moveq #0,d2
  3943.  move.b damagetaken(a0),d2
  3944.  beq .notbeenshot
  3945.  
  3946.  move.w ImpactX(a0),d3
  3947.  add.w d3,PLR1s_xspdval
  3948.  move.w ImpactZ(a0),d3
  3949.  add.w d3,PLR1s_zspdval
  3950.  move.w ImpactY(a0),d3
  3951.  ext.l d3
  3952.  asl.l #8,d3
  3953.  add.l d3,PLR1s_yvel
  3954.  
  3955.  move.w #0,ImpactX(a0)
  3956.  move.w #0,ImpactY(a0)
  3957.  move.w #0,ImpactZ(a0)
  3958.  
  3959.  jsr GetRand
  3960.  muls d2,d0
  3961.  asr.l #8,d0
  3962.  asr.l #4,d0
  3963.  add.w d0,PLR1s_angspd
  3964.  
  3965.  move.l #7*2116,hitcol
  3966.  sub.w d2,PLAYERONEHEALTH
  3967.  movem.l d0-d7/a0-a6,-(a7)
  3968.  move.b #$fb,IDNUM
  3969.  move.w #19,Samplenum
  3970.  clr.b notifplaying
  3971.  move.w #0,Noisex
  3972.  move.w #0,Noisez
  3973.  move.w #100,Noisevol
  3974.  jsr MakeSomeNoise
  3975.  
  3976.  movem.l (a7)+,d0-d7/a0-a6
  3977.  
  3978. .notbeenshot
  3979.  move.b #0,damagetaken(a0)
  3980.  move.b #10,numlives(a0)
  3981.  
  3982.  move.w p1_angpos,Facing(a0)
  3983.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3984.  
  3985.  move.w (a1),12(a0)
  3986.  move.w (a1),d2
  3987.  move.l #ZoneBrightTable,a1
  3988.  move.l (a1,d2.w*4),d2
  3989.  tst.b PLR1_StoodInTop
  3990.  bne.s .okinbott
  3991.  swap d2
  3992. .okinbott:
  3993.  
  3994.  move.w d2,2(a0)
  3995.  
  3996.  
  3997.  move.l p1_yoff,d0
  3998.  move.l p1_height,d1
  3999.  asr.l #1,d1
  4000.  add.l d1,d0
  4001.  asr.l #7,d0
  4002.  move.w d0,4(a0)
  4003.  
  4004. ***********************************
  4005.  
  4006.  move.l PLR2_Obj,a0 
  4007.  move.b #5,16(a0)
  4008.  
  4009.  move.w p2_angpos,d0
  4010.  and.w #8190,d0
  4011.  move.w d0,Facing(a0)
  4012. ; jsr ViewpointToDraw
  4013. ; asl.w #2,d0
  4014. ; moveq #0,d1
  4015. ; move.b p2_bobble,d1
  4016. ; not.b d1
  4017. ; lsr.b #3,d1
  4018. ; and.b #$3,d1
  4019. ; add.w d1,d0
  4020. ; move.w d0,10(a0)
  4021. ; move.w #10,8(a0)
  4022.  
  4023.  move.l ObjectPoints,a1
  4024.  move.l #ObjRotated,a2
  4025.  move.w (a0),d0
  4026.  move.l PLR2_xoff,(a1,d0.w*8)
  4027.  move.l PLR2_zoff,4(a1,d0.w*8)
  4028.  move.l PLR2_Roompt,a1
  4029.  
  4030.  moveq #0,d2
  4031.  move.b damagetaken(a0),d2
  4032.  beq .notbeenshot2
  4033.  move.w ImpactX(a0),d3
  4034.  add.w d3,PLR2s_xspdval
  4035.  move.w ImpactZ(a0),d3
  4036.  add.w d3,PLR2s_zspdval
  4037.  move.w ImpactY(a0),d3
  4038.  ext.l d3
  4039.  asl.l #8,d3
  4040.  add.l d3,PLR2s_yvel
  4041.  
  4042.  move.w #0,ImpactX(a0)
  4043.  move.w #0,ImpactY(a0)
  4044.  move.w #0,ImpactZ(a0)
  4045.  
  4046.  sub.w d2,PLAYERTWOHEALTH
  4047. .notbeenshot2
  4048.  move.b #0,damagetaken(a0)
  4049.  move.b #10,numlives(a0)
  4050.  
  4051.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4052.  
  4053.  move.w (a1),12(a0)
  4054.  move.w (a1),d2
  4055.  move.l #ZoneBrightTable,a1
  4056.  move.l (a1,d2.w*4),d2
  4057.  tst.b PLR2_StoodInTop
  4058.  bne.s .okinbott2
  4059.  swap d2
  4060. .okinbott2:
  4061.  
  4062.  move.w d2,2(a0)
  4063.  
  4064.  move.l p2_yoff,d0
  4065.  move.l p2_height,d1
  4066.  asr.l #1,d1
  4067.  add.l d1,d0
  4068.  asr.l #7,d0
  4069.  move.w d0,4(a0)
  4070.  
  4071.  jsr ViewpointToDraw
  4072.  add.l d0,d0
  4073.  
  4074.  move.l LINKFILE,a6
  4075.  add.l #PLR2ALIEN,a6
  4076.  move.w (a6),d7
  4077.  move.w d7,d1
  4078.  
  4079.  move.l LINKFILE,a6
  4080.  add.l #AlienStats,a6
  4081.  muls #AlienStatLen,d1
  4082.  add.l d1,a6
  4083.  move.b A_GFXType+1(a6),VECOBJ
  4084.  cmp.w #1,A_GFXType(a6)
  4085.  bne.s .NOSIDES2
  4086.  
  4087.  moveq #0,d0
  4088.  
  4089. .NOSIDES2:
  4090.  
  4091.  move.l LINKFILE,a6
  4092.  
  4093.  add.l #AlienAnimData,a6
  4094.  
  4095.  move.w d7,d1
  4096.  muls #A_AnimLen,d1
  4097.  add.l d1,a6
  4098.  
  4099. ; move.l ANIMPOINTER,a6
  4100.  
  4101.  muls #A_OptLen,d0
  4102.  add.w d0,a6
  4103.  
  4104.  move.w SecTimer(a0),d1
  4105.  move.w d1,d2
  4106.  muls #A_FrameLen,d1
  4107.  
  4108.  addq #1,d2
  4109.  
  4110.  move.w d2,d3
  4111.  muls #A_FrameLen,d3
  4112.  tst.b (a6,d3.w)
  4113.  bge.s .noendanim
  4114.  move.w #0,d2
  4115. .noendanim
  4116.  move.w d2,SecTimer(a0)
  4117.  
  4118.  move.w d2,d1
  4119.  
  4120.  muls #A_FrameLen,d1
  4121.  
  4122.  move.l #0,8(a0)
  4123.  move.b (a6,d1.w),9(a0)
  4124.  move.b 1(a6,d1.w),d0
  4125.  ext.w d0
  4126.  bgt.s .noflip
  4127.  move.b #128,10(a0)
  4128.  neg.w d0
  4129. .noflip:
  4130.  sub.w #1,d0
  4131.  move.b d0,11(a0)
  4132.  
  4133.  move.w #-1,6(a0)
  4134.  cmp.b #1,VECOBJ
  4135.  beq.s .nosize
  4136.  bgt.s .setlight
  4137.  move.w 2(a6,d1.w),6(a0)
  4138.  bra.s .ddone
  4139.  
  4140. .nosize
  4141.  
  4142. ; move.l #$00090001,8(a0)
  4143.  
  4144.  bra.s .ddone
  4145.  
  4146. .setlight:
  4147.  move.w 2(a6,d1.w),6(a0)
  4148.  
  4149.  move.b VECOBJ,d1
  4150.  or.b d1,10(a0)
  4151.  
  4152. .ddone:
  4153.  
  4154.  
  4155. **********************************
  4156.  
  4157.  move.l PLR1_Obj,a0
  4158.  
  4159.  ifeq CHEESEY
  4160.  
  4161.  tst.w PLAYERONEHEALTH
  4162.  bgt.s .notdead
  4163.  
  4164.  move.w #-1,12+128(a0)
  4165.  rts
  4166.  
  4167. .notdead: 
  4168.  
  4169.  move.l PLR1_Roompt,a1
  4170.  
  4171.  move.w Facing(a0),d0
  4172.  add.w #4096,d0
  4173.  and.w #8190,d0
  4174.  move.w d0,Facing+128(a0)
  4175.  
  4176.  move.w (a1),12+128(a0)
  4177.  move.w (a1),GraphicRoom+128(a0)
  4178.  
  4179.  moveq #0,d0
  4180.  move.b p1_gunselected,d0
  4181.  
  4182.  move.l LINKFILE,a1
  4183.  add.l #GunObjects,a1
  4184.  move.w (a1,d0.w*2),d0
  4185.  
  4186.  move.b d0,TypeOfThing+128(a0)
  4187.  move.b #1,128+16(a0)
  4188.  
  4189.  move.w (a0),d0
  4190.  move.w 128(a0),d1
  4191.  move.l ObjectPoints,a1
  4192.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4193.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4194.  
  4195.  st WhichAnim+128(a0)
  4196.  
  4197.  move.l p1_yoff,d0
  4198.  move.l p1_height,d1
  4199.  asr.l #2,d1
  4200.  add.l #10*128,d1
  4201.  add.l d1,d0
  4202.  asr.l #7,d0
  4203.  move.w d0,4+128(a0)
  4204.  move.l PLR1_BOBBLEY,d1
  4205.  asr.l #8,d1
  4206.  move.l d1,d0
  4207.  asr.l #1,d0
  4208.  add.l d0,d1
  4209.  add.w d1,4+128(a0)
  4210.  
  4211.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4212.  
  4213.  endc
  4214.  
  4215.  ifne CHEESEY
  4216.  move.w #-1,12+128(a0)
  4217.  endc
  4218.  
  4219.  rts
  4220.  
  4221. ***************************************************
  4222. **************************************************
  4223.  
  4224. USEPLR2:
  4225.  
  4226. ***********************************
  4227.  
  4228.  move.l PLR2_Obj,a0 
  4229.  move.b #5,16(a0)
  4230.  move.l ObjectPoints,a1
  4231.  move.l #ObjRotated,a2
  4232.  move.w (a0),d0
  4233.  move.l PLR2_xoff,(a1,d0.w*8)
  4234.  move.l PLR2_zoff,4(a1,d0.w*8)
  4235.  move.l PLR2_Roompt,a1
  4236.  
  4237.  moveq #0,d2
  4238.  move.b damagetaken(a0),d2
  4239.  beq .notbeenshot
  4240.  
  4241.  move.w ImpactX(a0),d3
  4242.  add.w d3,PLR2s_xspdval
  4243.  move.w ImpactZ(a0),d3
  4244.  add.w d3,PLR2s_zspdval
  4245.  
  4246.  
  4247.  
  4248.  move.l #7*2116,hitcol
  4249.  sub.w d2,PLAYERTWOHEALTH
  4250.  movem.l d0-d7/a0-a6,-(a7)
  4251.  move.w #19,Samplenum
  4252.  clr.b notifplaying
  4253.  move.b #$fb,IDNUM
  4254.  move.w #0,Noisex
  4255.  move.w #0,Noisez
  4256.  move.w #100,Noisevol
  4257.  jsr MakeSomeNoise
  4258.  
  4259.  movem.l (a7)+,d0-d7/a0-a6
  4260.  
  4261. .notbeenshot
  4262.  move.b #0,damagetaken(a0)
  4263.  move.b #10,numlives(a0)
  4264.  
  4265.  move.w p2_angpos,Facing(a0)
  4266.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4267.  
  4268.  move.w (a1),12(a0)
  4269.  move.w (a1),d2
  4270.  move.l #ZoneBrightTable,a1
  4271.  move.l (a1,d2.w*4),d2
  4272.  tst.b PLR2_StoodInTop
  4273.  bne.s .okinbott
  4274.  swap d2
  4275. .okinbott:
  4276.  
  4277.  move.w d2,2(a0)
  4278.  
  4279.  move.l PLR2_yoff,d0
  4280.  move.l p2_height,d1
  4281.  asr.l #1,d1
  4282.  add.l d1,d0
  4283.  asr.l #7,d0
  4284.  move.w d0,4(a0)
  4285.  
  4286. ***********************************
  4287.  
  4288.  move.l PLR1_Obj,a0 
  4289.  move.b #4,16(a0)
  4290.  
  4291.  move.w PLR1_angpos,d0
  4292.  and.w #8190,d0
  4293.  move.w d0,Facing(a0)
  4294. ; jsr ViewpointToDraw
  4295. ; asl.w #2,d0
  4296. ; moveq #0,d1
  4297. ; move.b p2_bobble,d1
  4298. ; not.b d1
  4299. ; lsr.b #3,d1
  4300. ; and.b #$3,d1
  4301. ; add.w d1,d0
  4302. ; move.w d0,10(a0)
  4303. ; move.w #10,8(a0)
  4304.  
  4305.  move.l ObjectPoints,a1
  4306.  move.l #ObjRotated,a2
  4307.  move.w (a0),d0
  4308.  move.l PLR1_xoff,(a1,d0.w*8)
  4309.  move.l PLR1_zoff,4(a1,d0.w*8)
  4310.  move.l PLR1_Roompt,a1
  4311.  
  4312.  moveq #0,d2
  4313.  move.b damagetaken(a0),d2
  4314.  beq .notbeenshot2
  4315.  
  4316.  move.w ImpactX(a0),d3
  4317.  add.w d3,PLR1s_xspdval
  4318.  move.w ImpactZ(a0),d3
  4319.  add.w d3,PLR1s_zspdval
  4320.  
  4321.  sub.w d2,PLAYERONEHEALTH
  4322. .notbeenshot2
  4323.  move.b #0,damagetaken(a0)
  4324.  move.b #10,numlives(a0)
  4325.  
  4326.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4327.  
  4328.  move.w (a1),12(a0)
  4329.  move.w (a1),d2
  4330.  move.l #ZoneBrightTable,a1
  4331.  move.l (a1,d2.w*4),d2
  4332.  tst.b PLR1_StoodInTop
  4333.  bne.s .okinbott2
  4334.  swap d2
  4335. .okinbott2:
  4336.  
  4337.  move.w d2,2(a0)
  4338.  
  4339.  move.l p1_yoff,d0
  4340.  move.l p1_height,d1
  4341.  asr.l #1,d1
  4342.  add.l d1,d0
  4343.  asr.l #7,d0
  4344.  move.w d0,4(a0)
  4345.  
  4346.  jsr ViewpointToDraw
  4347.  add.l d0,d0
  4348.  
  4349.  move.l LINKFILE,a6
  4350.  add.l #PLR1ALIEN,a6
  4351.  move.w (a6),d7
  4352.  move.w d7,d1
  4353.  
  4354.  move.l LINKFILE,a6
  4355.  add.l #AlienStats,a6
  4356.  muls #AlienStatLen,d1
  4357.  add.l d1,a6
  4358.  move.b A_GFXType+1(a6),VECOBJ
  4359.  cmp.w #1,A_GFXType(a6)
  4360.  bne.s .NOSIDES2
  4361.  
  4362.  moveq #0,d0
  4363.  
  4364. .NOSIDES2:
  4365.  
  4366.  move.l LINKFILE,a6
  4367.  
  4368.  add.l #AlienAnimData,a6
  4369.  
  4370.  move.w d7,d1
  4371.  muls #A_AnimLen,d1
  4372.  add.l d1,a6
  4373.  
  4374. ; move.l ANIMPOINTER,a6
  4375.  
  4376.  muls #A_OptLen,d0
  4377.  add.w d0,a6
  4378.  
  4379.  move.w SecTimer(a0),d1
  4380.  move.w d1,d2
  4381.  muls #A_FrameLen,d1
  4382.  
  4383.  addq #1,d2
  4384.  
  4385.  move.w d2,d3
  4386.  muls #A_FrameLen,d3
  4387.  tst.b (a6,d3.w)
  4388.  bge.s .noendanim
  4389.  move.w #0,d2
  4390. .noendanim
  4391.  move.w d2,SecTimer(a0)
  4392.  
  4393.  move.w d2,d1
  4394.  
  4395.  muls #A_FrameLen,d1
  4396.  
  4397.  move.l #0,8(a0)
  4398.  move.b (a6,d1.w),9(a0)
  4399.  move.b 1(a6,d1.w),d0
  4400.  ext.w d0
  4401.  bgt.s .noflip
  4402.  move.b #128,10(a0)
  4403.  neg.w d0
  4404. .noflip:
  4405.  sub.w #1,d0
  4406.  move.b d0,11(a0)
  4407.  
  4408.  move.w #-1,6(a0)
  4409.  cmp.b #1,VECOBJ
  4410.  beq.s .nosize
  4411.  bgt.s .setlight
  4412.  move.w 2(a6,d1.w),6(a0)
  4413.  bra.s .ddone
  4414.  
  4415. .nosize
  4416.  
  4417. ; move.l #$00090001,8(a0)
  4418.  
  4419.  bra.s .ddone
  4420.  
  4421. .setlight:
  4422.  move.w 2(a6,d1.w),6(a0)
  4423.  
  4424.  move.b VECOBJ,d1
  4425.  or.b d1,10(a0)
  4426.  
  4427. .ddone:
  4428.  
  4429. **********************************
  4430.  
  4431.  move.l PLR2_Obj,a0
  4432.  
  4433.  ifeq CHEESEY
  4434.  
  4435.  tst.w PLAYERTWOHEALTH
  4436.  bgt.s .notdead
  4437.  
  4438.  move.w #-1,12+64(a0)
  4439.  rts
  4440.  
  4441. .notdead: 
  4442.  move.l PLR2_Roompt,a1
  4443.  
  4444.  move.w Facing(a0),d0
  4445.  add.w #4096,d0
  4446.  and.w #8190,d0
  4447.  move.w d0,Facing+64(a0)
  4448.  
  4449.  move.w (a1),12+64(a0)
  4450.  move.w (a1),GraphicRoom+64(a0)
  4451.  
  4452.  moveq #0,d0
  4453.  move.b p2_gunselected,d0
  4454.  
  4455.  move.l LINKFILE,a1
  4456.  add.l #GunObjects,a1
  4457.  move.w (a1,d0.w*2),d0
  4458.  
  4459.  move.b d0,TypeOfThing+64(a0)
  4460.  move.b #1,64+16(a0)
  4461.  
  4462.  move.w (a0),d0
  4463.  move.w 64(a0),d1
  4464.  move.l ObjectPoints,a1
  4465.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4466.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4467.  
  4468.  st WhichAnim+64(a0)
  4469.  
  4470.  move.l p2_yoff,d0
  4471.  move.l p2_height,d1
  4472.  asr.l #2,d1
  4473.  add.l #10*128,d1
  4474.  add.l d1,d0
  4475.  asr.l #7,d0
  4476.  move.w d0,4+64(a0)
  4477.  move.l PLR2_BOBBLEY,d1
  4478.  asr.l #8,d1
  4479.  move.l d1,d0
  4480.  asr.l #1,d0
  4481.  add.l d0,d1
  4482.  add.w d1,4+64(a0)
  4483.  
  4484.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4485.  
  4486.  endc
  4487.  
  4488.  ifne CHEESEY
  4489.  
  4490.  move.w #-1,12+64(a0)
  4491.  endc
  4492.  
  4493.  rts
  4494.  
  4495.  
  4496.  
  4497. GunSelected: dc.b 0
  4498.  even
  4499.  
  4500.  
  4501. GunData: dc.l 0
  4502.  
  4503.  
  4504. protA: dc.w 0
  4505.  
  4506. Path:
  4507. ; incbin "testpath"
  4508. endpath:
  4509. pathpt: dc.l Path
  4510.  
  4511.  
  4512. PLR1KEYS: dc.b 0
  4513. PLR1PATH: dc.b 0
  4514. PLR1MOUSE: dc.b -1
  4515. PLR1JOY: dc.b 0
  4516. PLR2KEYS: dc.b 0
  4517. PLR2PATH: dc.b 0
  4518. PLR2MOUSE: dc.b -1
  4519. PLR2JOY: dc.b 0
  4520.  
  4521.  even
  4522.  
  4523. PLR1_bobble: dc.w 0
  4524. PLR2_bobble: dc.w 0
  4525. xwobble: dc.l 0
  4526. xwobxoff: dc.w 0
  4527.  
  4528. xwobzoff: dc.w 0
  4529.  
  4530. PLR1_Control:
  4531.  
  4532. ; Take a snapshot of everything.
  4533.  
  4534.  move.l PLR1_xoff,d2
  4535.  move.l d2,PLR1_oldxoff
  4536.  move.l d2,oldx
  4537.  move.l PLR1_zoff,d3
  4538.  move.l d3,PLR1_oldzoff
  4539.  move.l d3,oldz
  4540.  move.l p1_xoff,d0
  4541.  move.l d0,PLR1_xoff
  4542.  move.l d0,newx
  4543.  move.l p1_zoff,d1
  4544.  move.l d1,newz
  4545.  move.l d1,PLR1_zoff
  4546.  
  4547.  move.l p1_height,PLR1_height
  4548.  
  4549.  sub.l d2,d0
  4550.  sub.l d3,d1
  4551.  move.l d0,xdiff
  4552.  move.l d1,zdiff
  4553.  move.w p1_angpos,d0
  4554.  move.w d0,PLR1_angpos
  4555.  
  4556.  move.l #SineTable,a1
  4557.  move.w (a1,d0.w),PLR1_sinval
  4558.  add.w #2048,d0
  4559.  and.w #8190,d0
  4560.  move.w (a1,d0.w),PLR1_cosval
  4561.  
  4562.  move.l p1_yoff,d0
  4563.  move.w p1_bobble,d1
  4564.  move.w (a1,d1.w),d1
  4565.  move.w d1,d3
  4566.  ble.s .notnegative
  4567.  neg.w d1
  4568. .notnegative:
  4569.  add.w #16384,d1
  4570.  asr.w #4,d1
  4571.  
  4572.  tst.b PLR1_Ducked
  4573.  bne.s .notdouble
  4574.  add.w d1,d1
  4575. .notdouble
  4576.  ext.l d1
  4577.  
  4578.  move.l d1,PLR1_BOBBLEY
  4579.  
  4580.  move.l PLR1_height,d4
  4581.  sub.l d1,d4
  4582.  add.l d1,d0
  4583.  
  4584.  cmp.b #'s',mors
  4585.  beq.s .otherwob
  4586.  asr.w #6,d3
  4587.  ext.l d3
  4588.  move.l d3,xwobble
  4589.  move.w PLR1_sinval,d1
  4590.  muls d3,d1
  4591.  move.w PLR1_cosval,d2
  4592.  muls d3,d2
  4593.  swap d1
  4594.  swap d2
  4595.  asr.w #7,d1
  4596.  move.w d1,xwobxoff
  4597.  asr.w #7,d2
  4598.  neg.w d2
  4599.  move.w d2,xwobzoff
  4600. .otherwob
  4601.  
  4602.  move.l d0,PLR1_yoff
  4603.  move.l d0,newy
  4604.  move.l d0,oldy
  4605.  
  4606.  move.l d4,thingheight
  4607.  move.l #40*256,StepUpVal
  4608.  tst.b PLR1_Ducked
  4609.  beq.s .okbigstep
  4610.  move.l #10*256,StepUpVal
  4611. .okbigstep:
  4612.  
  4613.  move.l #$1000000,StepDownVal
  4614.  
  4615.  move.l PLR1_Roompt,a0
  4616.  move.w ToTelZone(a0),d0
  4617.  blt .noteleport
  4618.  
  4619.  move.w ToTelX(a0),newx
  4620.  move.w ToTelZ(a0),newz
  4621.  move.w #-1,CollId
  4622.  move.l #%111111111111111111,CollideFlags
  4623.  bsr Collision
  4624.  tst.b hitwall
  4625.  beq.s .teleport
  4626.  
  4627.  move.w PLR1_xoff,newx
  4628.  move.w PLR1_zoff,newz
  4629.  bra .noteleport
  4630.  
  4631. .teleport:
  4632.  
  4633.  st PLR1_TELEPORTED
  4634.  
  4635.  move.l PLR1_Roompt,a0
  4636.  move.w ToTelZone(a0),d0
  4637.  move.w ToTelX(a0),PLR1_xoff
  4638.  move.w ToTelZ(a0),PLR1_zoff
  4639.  move.l PLR1_yoff,d1
  4640.  sub.l ToZoneFloor(a0),d1
  4641.  move.l ZoneAdds,a0
  4642.  move.l (a0,d0.w*4),a0
  4643.  add.l LEVELDATA,a0
  4644.  move.l a0,PLR1_Roompt
  4645.  add.l ToZoneFloor(a0),d1
  4646.  move.l d1,PLR1s_yoff
  4647.  move.l d1,PLR1_yoff
  4648.  move.l d1,PLR1s_tyoff
  4649.  move.l PLR1_xoff,PLR1s_xoff
  4650.  move.l PLR1_zoff,PLR1s_zoff
  4651.  
  4652.  SAVEREGS
  4653.  move.w #0,Noisex
  4654.  move.w #0,Noisez
  4655.  move.w #26,Samplenum
  4656.  move.w #100,Noisevol
  4657.  move.b #$fa,IDNUM
  4658.  jsr MakeSomeNoise
  4659.  GETREGS
  4660.  
  4661.  bra .cantmove
  4662.  
  4663. .noteleport:
  4664.  
  4665.  move.l PLR1_Roompt,objroom
  4666.  move.w #%100000000,wallflags
  4667.  move.b PLR1_StoodInTop,StoodInTop
  4668.  
  4669.  move.l #%1011111110111000011,CollideFlags
  4670.  move.w #-1,CollId
  4671.  
  4672.  bsr Collision
  4673.  tst.b hitwall
  4674.  beq.s .nothitanything
  4675.  move.w oldx,PLR1_xoff
  4676.  move.w oldz,PLR1_zoff
  4677.  move.l PLR1_xoff,PLR1s_xoff
  4678.  move.l PLR1_zoff,PLR1s_zoff
  4679.  bra .cantmove
  4680. .nothitanything:
  4681.  
  4682.  move.w #40,extlen
  4683.  move.b #0,awayfromwall
  4684.  
  4685.  clr.b exitfirst
  4686.  clr.b wallbounce
  4687.  bsr MoveObject
  4688.  move.b StoodInTop,PLR1_StoodInTop
  4689.  move.l objroom,PLR1_Roompt
  4690.  move.w newx,PLR1_xoff
  4691.  move.w newz,PLR1_zoff
  4692.  move.l PLR1_xoff,PLR1s_xoff
  4693.  move.l PLR1_zoff,PLR1s_zoff
  4694.  
  4695. .cantmove:
  4696.  
  4697.  move.l PLR1_Roompt,a0
  4698.  
  4699.  move.l ToZoneFloor(a0),d0
  4700.  tst.b PLR1_StoodInTop
  4701.  beq.s notintop
  4702.  move.l ToUpperFloor(a0),d0
  4703. notintop:
  4704.  
  4705.  adda.w #ToZonePts,a0
  4706.  sub.l PLR1_height,d0
  4707.  move.l d0,PLR1s_tyoff
  4708.  move.w p1_angpos,tmpangpos
  4709.  
  4710. ; move.l (a0),a0        ; jump to viewpoint list
  4711.  * A0 is pointing at a pointer to list of points to rotate
  4712.  move.w (a0)+,d1
  4713.  ext.l d1
  4714.  add.l PLR1_Roompt,d1
  4715.  move.l d1,PLR1_PointsToRotatePtr
  4716.  tst.w (a0)+
  4717.  sne.s DRAWNGRAPHTOP
  4718.  beq.s nobackgraphics
  4719.  cmp.b #'s',mors
  4720.  beq.s nobackgraphics
  4721.  move.l a0,-(a7)
  4722.  jsr putinbackdrop 
  4723.  move.l (a7)+,a0
  4724. nobackgraphics:
  4725.  adda.w #10,a0
  4726.  move.l a0,PLR1_ListOfGraphRooms
  4727.  
  4728. *************************************************
  4729.  rts
  4730.  
  4731. DRAWNGRAPHTOP
  4732.  dc.w 0 
  4733. tstzone: dc.l 0
  4734. CollId: dc.w 0
  4735.  
  4736. PLR2_Control:
  4737.  
  4738. ; Take a snapshot of everything.
  4739.  
  4740.  move.l PLR2_xoff,d2
  4741.  move.l d2,PLR2_oldxoff
  4742.  move.l d2,oldx
  4743.  move.l PLR2_zoff,d3
  4744.  move.l d3,PLR2_oldzoff
  4745.  move.l d3,oldz
  4746.  move.l p2_xoff,d0
  4747.  move.l d0,PLR2_xoff
  4748.  move.l d0,newx
  4749.  move.l p2_zoff,d1
  4750.  move.l d1,newz
  4751.  move.l d1,PLR2_zoff
  4752.  
  4753.  move.l p2_height,PLR2_height
  4754.  
  4755.  sub.l d2,d0
  4756.  sub.l d3,d1
  4757.  move.l d0,xdiff
  4758.  move.l d1,zdiff
  4759.  move.w p2_angpos,d0
  4760.  move.w d0,PLR2_angpos
  4761.  
  4762.  move.l #SineTable,a1
  4763.  move.w (a1,d0.w),PLR2_sinval
  4764.  add.w #2048,d0
  4765.  and.w #8190,d0
  4766.  move.w (a1,d0.w),PLR2_cosval
  4767.  
  4768.  move.l p2_yoff,d0
  4769.  move.w p2_bobble,d1
  4770.  move.w (a1,d1.w),d1
  4771.  move.w d1,d3
  4772.  ble.s .notnegative
  4773.  neg.w d1
  4774. .notnegative:
  4775.  add.w #16384,d1
  4776.  asr.w #4,d1
  4777.  
  4778.  tst.b PLR2_Ducked
  4779.  bne.s .notdouble
  4780.  add.w d1,d1
  4781. .notdouble
  4782.  ext.l d1
  4783.  
  4784.  move.l d1,PLR2_BOBBLEY
  4785.  
  4786.  move.l PLR2_height,d4
  4787.  sub.l d1,d4
  4788.  add.l d1,d0
  4789.  
  4790.  cmp.b #'s',mors
  4791.  bne.s .otherwob
  4792.  asr.w #6,d3
  4793.  ext.l d3
  4794.  move.l d3,xwobble
  4795.  move.w PLR2_sinval,d1
  4796.  muls d3,d1
  4797.  move.w PLR2_cosval,d2
  4798.  muls d3,d2
  4799.  swap d1
  4800.  swap d2
  4801.  asr.w #7,d1
  4802.  move.w d1,xwobxoff
  4803.  asr.w #7,d2
  4804.  neg.w d2
  4805.  move.w d2,xwobzoff
  4806. .otherwob
  4807.  
  4808.  move.l d0,PLR2_yoff
  4809.  move.l d0,newy
  4810.  move.l d0,oldy
  4811.  
  4812.  move.l d4,thingheight
  4813.  move.l #40*256,StepUpVal
  4814.  tst.b PLR2_Ducked
  4815.  beq.s .okbigstep
  4816.  move.l #10*256,StepUpVal
  4817. .okbigstep:
  4818.  
  4819.  move.l #$1000000,StepDownVal
  4820.  
  4821.  move.l PLR2_Roompt,a0
  4822.  move.w ToTelZone(a0),d0
  4823.  blt .noteleport
  4824.  
  4825.  move.w ToTelX(a0),newx
  4826.  move.w ToTelZ(a0),newz
  4827.  move.w #-1,CollId
  4828.  move.l #%111111111111111111,CollideFlags
  4829.  bsr Collision
  4830.  tst.b hitwall
  4831.  beq.s .teleport
  4832.  
  4833.  move.w PLR2_xoff,newx
  4834.  move.w PLR2_zoff,newz
  4835.  bra .noteleport
  4836.  
  4837. .teleport:
  4838.  
  4839.  st PLR2_TELEPORTED
  4840.  
  4841.  move.l PLR2_Roompt,a0
  4842.  move.w ToTelZone(a0),d0
  4843.  move.w ToTelX(a0),PLR2_xoff
  4844.  move.w ToTelZ(a0),PLR2_zoff
  4845.  move.l PLR2_yoff,d1
  4846.  sub.l ToZoneFloor(a0),d1
  4847.  move.l ZoneAdds,a0
  4848.  move.l (a0,d0.w*4),a0
  4849.  add.l LEVELDATA,a0
  4850.  move.l a0,PLR2_Roompt
  4851.  add.l ToZoneFloor(a0),d1
  4852.  move.l d1,PLR2s_yoff
  4853.  move.l d1,PLR2_yoff
  4854.  move.l d1,PLR2s_tyoff
  4855.  move.l PLR2_xoff,PLR2s_xoff
  4856.  move.l PLR2_zoff,PLR2s_zoff
  4857.  
  4858.  SAVEREGS
  4859.  move.w #0,Noisex
  4860.  move.w #0,Noisez
  4861.  move.w #26,Samplenum
  4862.  move.w #100,Noisevol
  4863.  move.b #$fa,IDNUM
  4864.  jsr MakeSomeNoise
  4865.  GETREGS
  4866.  
  4867.  bra .cantmove
  4868.  
  4869. .noteleport:
  4870.  
  4871.  move.l PLR2_Roompt,objroom
  4872.  move.w #%100000000000,wallflags
  4873.  move.b PLR2_StoodInTop,StoodInTop
  4874.  
  4875.  move.l #%1011111010111100011,CollideFlags
  4876.  move.w #-1,CollId
  4877.  
  4878.  bsr Collision
  4879.  tst.b hitwall
  4880.  beq.s .nothitanything
  4881.  move.w oldx,PLR2_xoff
  4882.  move.w oldz,PLR2_zoff
  4883.  move.l PLR2_xoff,PLR2s_xoff
  4884.  move.l PLR2_zoff,PLR2s_zoff
  4885.  bra .cantmove
  4886. .nothitanything:
  4887.  
  4888.  move.w #40,extlen
  4889.  move.b #0,awayfromwall
  4890.  
  4891.  clr.b exitfirst
  4892.  clr.b wallbounce
  4893.  bsr MoveObject
  4894.  move.b StoodInTop,PLR2_StoodInTop
  4895.  move.l objroom,PLR2_Roompt
  4896.  move.w newx,PLR2_xoff
  4897.  move.w newz,PLR2_zoff
  4898.  move.l PLR2_xoff,PLR2s_xoff
  4899.  move.l PLR2_zoff,PLR2s_zoff
  4900.  
  4901. .cantmove
  4902.  
  4903.  move.l PLR2_Roompt,a0
  4904.  
  4905.  move.l ToZoneFloor(a0),d0
  4906.  tst.b PLR2_StoodInTop
  4907.  beq.s .notintop
  4908.  move.l ToUpperFloor(a0),d0
  4909. .notintop:
  4910.  
  4911.  adda.w #ToZonePts,a0
  4912.  sub.l PLR2_height,d0
  4913.  move.l d0,PLR2s_tyoff
  4914.  move.w p2_angpos,tmpangpos
  4915.  
  4916. ; move.l (a0),a0        ; jump to viewpoint list
  4917.  * A0 is pointing at a pointer to list of points to rotate
  4918.  move.w (a0)+,d1
  4919.  ext.l d1
  4920.  add.l PLR2_Roompt,d1
  4921.  move.l d1,PLR2_PointsToRotatePtr
  4922.  tst.w (a0)+
  4923.  sne.s DRAWNGRAPHTOP
  4924.  beq.s .nobackgraphics
  4925.  cmp.b #'s',mors
  4926.  bne.s .nobackgraphics
  4927.  move.l a0,-(a7)
  4928.  jsr putinbackdrop 
  4929.  move.l (a7)+,a0
  4930. .nobackgraphics:
  4931.  adda.w #10,a0
  4932.  move.l a0,PLR2_ListOfGraphRooms
  4933.  
  4934. *****************************************************
  4935.  rts
  4936.  
  4937.  
  4938. KeyMap: ds.b 256
  4939.  
  4940. fillscrnwater:
  4941.  dc.w 0
  4942. DONTDOGUN:
  4943.  dc.w 0
  4944.  
  4945. ;temptemp: ds.l 200
  4946. ;temptempptr: dc.l 0
  4947.  
  4948. DrawDisplay:
  4949.  
  4950. ; move.l #temptemp,temptempptr
  4951.  
  4952.  clr.b fillscrnwater
  4953.  
  4954.  move.l #SineTable,a0
  4955.  move.w angpos,d0
  4956.  move.w (a0,d0.w),d6
  4957.  adda.w #2048,a0
  4958.  move.w (a0,d0.w),d7
  4959.  move.w d6,sinval
  4960.  move.w d7,cosval
  4961.  
  4962.  move.l yoff,d0
  4963.  asr.l #8,d0
  4964.  move.w d0,d1
  4965.  add.w #256-32,d1
  4966.  and.w #255,d1
  4967.  move.w d1,wallyoff
  4968.  move.l yoff,d0
  4969.  asr.l #6,d0
  4970.  move.w d0,flooryoff
  4971.  
  4972.  move.w xoff,d6
  4973.  move.w d6,d3
  4974.  asr.w #1,d3
  4975.  add.w d3,d6
  4976.  asr.w #1,d6
  4977.  move.w d6,xoff34
  4978.  
  4979.  move.w zoff,d6
  4980.  move.w d6,d3
  4981.  asr.w #1,d3
  4982.  add.w d3,d6
  4983.  asr.w #1,d6
  4984.  move.w d6,zoff34
  4985.  
  4986.  bsr RotateLevelPts
  4987.  bsr RotateObjectPts
  4988.  bsr CalcPLR1InLine
  4989.  
  4990.  
  4991.  cmp.b #'n',mors
  4992.  bne.s doplr2too
  4993.  move.l PLR2_Obj,a0
  4994.  move.w #-1,12(a0)
  4995.  move.w #-1,GraphicRoom(a0)
  4996.  bra noplr2either
  4997.  
  4998. doplr2too:
  4999.  bsr CalcPLR2InLine
  5000. noplr2either:
  5001.  
  5002.  move.l endoflist,a0
  5003. ; move.w #-1,(a0)
  5004.  
  5005. ; move.l #FinalOrder,a0
  5006.  
  5007.  
  5008. subroomloop:
  5009. ; move.w (a0)+,d7
  5010.  move.w -(a0),d7
  5011.  blt jumpoutofrooms
  5012.  
  5013. ; bsr setlrclip
  5014. ; move.w leftclip,d0
  5015. ; cmp.w rightclip,d0
  5016. ; bge subroomloop
  5017.  move.l a0,-(a7)
  5018.  
  5019.  move.l ZoneAdds,a0
  5020.  move.l (a0,d7.w*4),a0
  5021.  add.l LEVELDATA,a0
  5022.  move.l ToZoneRoof(a0),SplitHeight
  5023.  move.l a0,ROOMBACK
  5024.  
  5025.  move.l ZoneGraphAdds,a0
  5026.  move.l 4(a0,d7.w*8),a2
  5027.  move.l (a0,d7.w*8),a0
  5028.  
  5029.  add.l LEVELGRAPHICS,a0
  5030.  add.l LEVELGRAPHICS,a2
  5031.  move.l a2,ThisRoomToDraw+4
  5032.  move.l a0,ThisRoomToDraw
  5033.  
  5034.  move.l ListOfGraphRooms,a1
  5035.  
  5036.  
  5037.  
  5038. finditit:
  5039.  tst.w (a1)
  5040.  blt nomoretodoatall
  5041.  cmp.w (a1),d7
  5042.  beq outoffind
  5043.  adda.w #8,a1
  5044.  bra finditit
  5045.  
  5046. outoffind:
  5047.  
  5048.  move.l a1,-(a7)
  5049.  
  5050.  
  5051.  move.w #0,leftclip
  5052.  move.w RIGHTX,rightclip
  5053.  moveq #0,d7
  5054.  move.w 2(a1),d7
  5055.  blt.s outofrcliplop
  5056.  move.l LEVELCLIPS,a0
  5057.  lea (a0,d7.l*2),a0
  5058.  
  5059.  tst.w (a0)
  5060.  blt outoflcliplop
  5061.  
  5062.  bsr NEWsetlclip
  5063.  
  5064. intolcliplop:        ; clips
  5065.  tst.w (a0)
  5066.  blt outoflcliplop
  5067.  
  5068.  bsr NEWsetlclip 
  5069.  bra intolcliplop
  5070.  
  5071. outoflcliplop:
  5072.  
  5073.  addq #2,a0
  5074.  
  5075.  tst.w (a0)
  5076.  blt outofrcliplop
  5077.  
  5078.  bsr NEWsetrclip
  5079.  
  5080. intorcliplop:        ; clips
  5081.  tst.w (a0)
  5082.  blt outofrcliplop
  5083.  
  5084.  bsr NEWsetrclip 
  5085.  bra intorcliplop
  5086.  
  5087. outofrcliplop:
  5088.  
  5089.  
  5090.  move.w leftclip,d0
  5091.  cmp.w RIGHTX,d0
  5092.  bge dontbothercantseeit
  5093.  move.w rightclip,d1
  5094.  blt dontbothercantseeit
  5095.  cmp.w d1,d0
  5096.  bge dontbothercantseeit
  5097.  
  5098.  move.l yoff,d0
  5099.  cmp.l SplitHeight,d0
  5100.  blt botfirst
  5101.  
  5102.  move.l ThisRoomToDraw+4,a0
  5103.  cmp.l LEVELGRAPHICS,a0
  5104.  beq.s noupperroom
  5105.  st DOUPPER
  5106.  
  5107.  move.l ROOMBACK,a1
  5108.  move.l ToUpperRoof(a1),TOPOFROOM
  5109.  move.l ToUpperFloor(a1),BOTOFROOM
  5110.  
  5111.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5112.  bsr dothisroom
  5113. noupperroom:
  5114.  move.l ThisRoomToDraw,a0
  5115.  clr.b DOUPPER
  5116.  move.l #CurrentPointBrights,PointBrightsPtr
  5117.  
  5118.  move.l ROOMBACK,a1
  5119.  move.l ToZoneRoof(a1),d0
  5120.  move.l d0,TOPOFROOM
  5121.  move.l ToZoneFloor(a1),d1
  5122.  move.l d1,BOTOFROOM
  5123.  
  5124.  move.l ToZoneWater(a1),d2
  5125.  cmp.l yoff,d2
  5126.  blt.s .abovefirst
  5127.  move.l d2,BEFOREWATTOP
  5128.  move.l d1,BEFOREWATBOT
  5129.  move.l d2,AFTERWATBOT
  5130.  move.l d0,AFTERWATTOP
  5131.  bra.s .belowfirst
  5132. .abovefirst:
  5133.  move.l d0,BEFOREWATTOP
  5134.  move.l d2,BEFOREWATBOT
  5135.  move.l d1,AFTERWATBOT
  5136.  move.l d2,AFTERWATTOP
  5137. .belowfirst:
  5138.  
  5139.  bsr dothisroom
  5140.  
  5141.  bra dontbothercantseeit
  5142. botfirst:
  5143.  
  5144.  move.l ThisRoomToDraw,a0
  5145.  clr.b DOUPPER
  5146.  move.l #CurrentPointBrights,PointBrightsPtr
  5147.  
  5148.  move.l ROOMBACK,a1
  5149.  move.l ToZoneRoof(a1),d0
  5150.  move.l d0,TOPOFROOM
  5151.  move.l ToZoneFloor(a1),d1
  5152.  move.l d1,BOTOFROOM
  5153.  
  5154.  move.l ToZoneWater(a1),d2
  5155.  cmp.l yoff,d2
  5156.  blt.s .abovefirst
  5157.  move.l d2,BEFOREWATTOP
  5158.  move.l d1,BEFOREWATBOT
  5159.  move.l d2,AFTERWATBOT
  5160.  move.l d0,AFTERWATTOP
  5161.  bra.s .belowfirst
  5162. .abovefirst:
  5163.  move.l d0,BEFOREWATTOP
  5164.  move.l d2,BEFOREWATBOT
  5165.  move.l d1,AFTERWATBOT
  5166.  move.l d2,AFTERWATTOP
  5167. .belowfirst:
  5168.  
  5169.  
  5170.  bsr dothisroom
  5171.  move.l ThisRoomToDraw+4,a0
  5172.  cmp.l LEVELGRAPHICS,a0
  5173.  beq.s noupperroom2
  5174.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5175.  
  5176.  move.l ROOMBACK,a1
  5177.  move.l ToUpperRoof(a1),TOPOFROOM
  5178.  move.l ToUpperFloor(a1),BOTOFROOM
  5179.  
  5180.  st DOUPPER
  5181.  bsr dothisroom
  5182. noupperroom2:
  5183.  
  5184. dontbothercantseeit:
  5185. pastemp:
  5186.  
  5187.  move.l (a7)+,a1
  5188.  move.l ThisRoomToDraw,a0
  5189.  move.w (a0),d7
  5190.  
  5191.  adda.w #8,a1
  5192.  bra finditit
  5193.  
  5194. nomoretodoatall:
  5195.  
  5196.  move.l (a7)+,a0
  5197.  
  5198.  bra subroomloop
  5199.  
  5200. jumpoutofrooms:
  5201.  
  5202.  
  5203.  tst.b DONTDOGUN
  5204.  bne NOGUNLOOK
  5205.  
  5206.  cmp.b #'s',mors
  5207.  beq.s drawslavegun
  5208.  
  5209.  moveq #0,d0
  5210.  move.b PLR1_GunSelected,d0
  5211.  moveq #0,d1
  5212.  move.b PLR1_GunFrame,d1
  5213. ; bsr DRAWINGUN
  5214.  bra drawngun
  5215.  
  5216. drawslavegun
  5217.  moveq #0,d0
  5218.  move.b PLR2_GunSelected,d0
  5219.  moveq #0,d1
  5220.  move.b PLR2_GunFrame,d1
  5221. ; bsr DRAWINGUN
  5222.  
  5223. drawngun:
  5224.  
  5225. NOGUNLOOK:
  5226.  
  5227.  moveq #0,d1
  5228.  move.b PLR1_GunFrame,d1
  5229.  sub.w TempFrames,d1
  5230.  bgt.s .nn
  5231.  moveq #0,d1
  5232. .nn
  5233.  move.b d1,PLR1_GunFrame
  5234.  
  5235.  ble.s .donefire
  5236.  sub.b #1,PLR1_GunFrame
  5237. .donefire:
  5238.  
  5239.  moveq #0,d1
  5240.  move.b PLR2_GunFrame,d1
  5241.  sub.w TempFrames,d1
  5242.  bgt.s .nn2
  5243.  moveq #0,d1
  5244. .nn2
  5245.  move.b d2,PLR2_GunFrame
  5246.  
  5247.  ble.s .donefire2
  5248.  sub.b #1,PLR2_GunFrame
  5249. .donefire2:
  5250.  
  5251.  tst.b DOANYWATER
  5252.  beq.s nowaterfull
  5253.  
  5254.  move.w #231,d0
  5255.  move.l FASTBUFFER,a0
  5256.  tst.b fillscrnwater
  5257.  beq nowaterfull
  5258.  bgt oknothalf
  5259.  moveq #119,d0
  5260.  add.l #320*120*2,a0
  5261. oknothalf:
  5262.  
  5263.  bclr.b #1,$bfe001
  5264.  
  5265.  move.l #brightentab+512*4,a2
  5266.  moveq #0,d2
  5267.  
  5268.  tst.b FULLSCR
  5269.  bne.s DOALLSCREEN
  5270.  
  5271. DOSOMESCREEN:
  5272.  
  5273.  move.w #159,d0
  5274. .fw:
  5275.  move.w #191,d1
  5276. .fwa:
  5277.  move.b (a0),d2
  5278.  move.b (a2,d2.w*2),(a0)+
  5279.  dbra d1,.fwa
  5280.  add.w #(320-192),a0
  5281.  dbra d0,.fw
  5282.  rts
  5283.  
  5284. DOALLSCREEN:
  5285.  
  5286. fw:
  5287.  move.w #287,d1
  5288. fwa:
  5289.  move.b (a0),d2
  5290.  move.b (a2,d2.w*2),(a0)+
  5291.  dbra d1,fwa
  5292.  add.w #32,a0
  5293.  dbra d0,fw
  5294.  
  5295. ; move.l frompt,a0
  5296. ; add.l #104*4*60,a0
  5297. ; move.w #31,d0
  5298. ;fw:
  5299. ; move.w d5,d1
  5300. ; move.l a0,a1
  5301. ;fwd:
  5302. ;val SET 104*4*19
  5303. ; REPT 20
  5304. ; and.w #$ff,val(a1)
  5305. ;val SET val-104*4
  5306. ; ENDR
  5307. ; sub.l #104*4*20,a1
  5308. ; dbra d1,fwd
  5309. ; addq #4,a0
  5310. ; dbra d0,fw
  5311. ;
  5312. ; addq #4,a0
  5313. ;
  5314. ; move.w #31,d0
  5315. ;sw:
  5316. ; move.w d5,d1
  5317. ; move.l a0,a1
  5318. ;swd:
  5319. ;val SET 104*4*19
  5320. ; REPT 20
  5321. ; and.w #$ff,val(a1)
  5322. ;val SET val-104*4
  5323. ; ENDR
  5324. ; sub.l #104*4*20,a1
  5325. ; dbra d1,swd
  5326. ; addq #4,a0
  5327. ; dbra d0,sw
  5328. ;
  5329. ; addq #4,a0
  5330. ;
  5331. ; move.w #31,d0
  5332. ;tw:
  5333. ; move.w d5,d1
  5334. ; move.l a0,a1
  5335. ;twd:
  5336. ;val SET 104*4*19
  5337. ; REPT 20
  5338. ; and.w #$ff,val(a1)
  5339. ;val SET val-104*4
  5340. ; ENDR
  5341. ; sub.l #104*4*20,a1
  5342. ; dbra d1,twd
  5343. ; addq #4,a0
  5344. ; dbra d0,tw
  5345. ;
  5346.  rts
  5347.  
  5348. nowaterfull:
  5349.  bset.b #1,$bfe001
  5350.  rts
  5351.  
  5352. prot9: dc.w 0
  5353.  
  5354. ;TempBuffer: ds.l 100 
  5355.  
  5356. prot8: dc.w 0
  5357.  
  5358. ClipTable: ds.l 30
  5359. EndOfClipPt: dc.l 0
  5360. DOUPPER: dc.w 0
  5361.  
  5362. RealTable:
  5363.  dc.l prot1-78935450
  5364.  dc.l prot2-78935450
  5365.  dc.l prot3-78935450
  5366.  dc.l prot4-78935450
  5367.  dc.l prot5-78935450
  5368.  dc.l prot6-78935450
  5369.  dc.l prot7-78935450
  5370.  dc.l prot8-78935450
  5371.  dc.l prot9-78935450
  5372.  dc.l protA-78935450
  5373.  
  5374. dothisroom
  5375.  
  5376.  move.w (a0)+,d0
  5377.  move.w d0,currzone
  5378.  move.w d0,d1
  5379.  muls #40,d1
  5380.  add.l #BIGMAP,d1
  5381.  move.l d1,BIGPTR
  5382.  move.w d0,d1
  5383.  ext.l d1
  5384.  asl.w #2,d1
  5385.  add.l #COMPACTMAP,d1
  5386.  move.l d1,COMPACTPTR
  5387.  add.l #4,d1
  5388.  cmp.l LASTZONE,d1
  5389.  ble.s .nochange
  5390.  move.l d1,LASTZONE
  5391. .nochange:
  5392.  
  5393.  move.l #ZoneBrightTable,a1
  5394.  move.l (a1,d0.w*4),d1
  5395.  tst.b DOUPPER
  5396.  bne.s .okbot
  5397.  swap d1
  5398. .okbot:
  5399.  move.w d1,ZoneBright
  5400.  
  5401. polyloop:
  5402.  move.w (a0)+,d0
  5403.  move.w d0,WALLIDENT
  5404.  and.w #$ff,d0
  5405.  tst.b d0
  5406.  blt jumpoutofloop
  5407.  beq itsawall
  5408.  cmp.w #3,d0
  5409.  beq itsasetclip
  5410.  blt itsafloor
  5411.  cmp.w #4,d0
  5412.  beq itsanobject
  5413.  cmp.w #5,d0
  5414.  beq itsanarc
  5415.  cmp.w #6,d0
  5416.  beq itsalightbeam
  5417.  cmp.w #7,d0
  5418.  beq.s itswater
  5419.  cmp.w #9,d0
  5420.  ble itsachunkyfloor
  5421.  cmp.w #11,d0
  5422.  ble itsabumpyfloor
  5423.  cmp.w #12,d0
  5424.  beq.s itsbackdrop
  5425.  cmp.w #13,d0
  5426.  beq.s itsaseewall
  5427.  
  5428.  bra polyloop
  5429.  
  5430. itsaseewall:
  5431.  st seethru
  5432.  jsr itsawalldraw
  5433.  bra polyloop
  5434.  
  5435. itsbackdrop:
  5436.  jsr putinbackdrop
  5437.  bra polyloop
  5438.  
  5439. itswater:
  5440.  PROTHCHECK
  5441.  move.w #2,SMALLIT
  5442.  move.w #3,d0
  5443.  clr.b gourfloor
  5444.  move.l #FloorLine,LineToUse
  5445.  st usewater
  5446.  clr.b usebumps
  5447.  jsr itsafloordraw
  5448.  bra polyloop
  5449.  
  5450. itsanarc:
  5451.  jsr CurveDraw
  5452.  bra polyloop
  5453.  
  5454. itsanobject:
  5455.  jsr ObjDraw
  5456.  bra polyloop
  5457.  
  5458. itsalightbeam:
  5459.  jsr LightDraw
  5460.  bra polyloop
  5461.  
  5462. itsabumpyfloor:
  5463.  move.w #1,SMALLIT
  5464.  sub.w #9,d0
  5465.  st usebumps
  5466.  st smoothbumps
  5467.  clr.b usewater
  5468.  move.l #BumpLine,LineToUse
  5469.  jsr itsafloordraw
  5470.  bra polyloop
  5471.  
  5472. itsachunkyfloor:
  5473.  move.w #1,SMALLIT
  5474.  subq.w #7,d0
  5475.  st usebumps
  5476.  sub.w #12,topclip
  5477. ; add.w #10,botclip
  5478.  clr.b smoothbumps
  5479.  clr.b usewater
  5480.  move.l #BumpLine,LineToUse
  5481.  jsr itsafloordraw
  5482.  add.w #12,topclip
  5483. ; sub.w #10,botclip
  5484.  bra polyloop 
  5485.  
  5486. itsafloor:
  5487.  
  5488.  move.l PointBrightsPtr,FloorPtBrights
  5489.  
  5490.  move.w currzone,d1
  5491.  muls #80,d1
  5492.  
  5493.  cmp.w #2,d0
  5494.  bne.s .nfl
  5495.  add.l #2,d1
  5496. .nfl
  5497.  add.l d1,FloorPtBrights
  5498.  
  5499.  move.w #1,SMALLIT
  5500.  
  5501.  movem.l a0/d0,-(a7)
  5502.  move.l $4.w,a6
  5503.  jsr _LVOSuperState(a6)
  5504.  move.l d0,SSTACK
  5505.  movem.l (a7)+,a0/d0
  5506.  
  5507.  move.l #FloorLine,LineToUse
  5508. * 1,2 = floor/roof
  5509.  clr.b usewater
  5510.  clr.b usebumps
  5511.  move.b GOURSEL,gourfloor    
  5512.  jsr itsafloordraw
  5513.  move.l a0,-(a7)
  5514.  move.l $4.w,a6
  5515.  move.l SSTACK,d0
  5516.  jsr _LVOUserState(a6)
  5517.  move.l (a7)+,a0
  5518.  bra polyloop
  5519. itsasetclip:
  5520.  bra polyloop
  5521. itsawall:
  5522.  clr.b seethru
  5523. ; move.l #stripbuffer,a1
  5524.  jsr itsawalldraw
  5525.  bra polyloop
  5526.  
  5527. jumpoutofloop:
  5528.  rts
  5529.  
  5530. LASTZONE: dc.l 0
  5531. COMPACTPTR: dc.l 0
  5532. BIGPTR: dc.l 0
  5533. WALLIDENT: dc.w 0
  5534. SMALLIT: dc.w 0
  5535. GOURSEL: dc.w 0
  5536. ThisRoomToDraw: dc.l 0,0
  5537. SplitHeight: dc.l 0
  5538.  
  5539.  include "ab3:source_4000/OrderZones"
  5540.  
  5541. ReadMouse:
  5542.  move.l #$dff000,a6
  5543.  clr.l d0
  5544.  clr.l d1
  5545.  move.w $a(a6),d0
  5546.  lsr.w #8,d0
  5547.  ext.l d0
  5548.  move.w d0,d3
  5549.  move.w oldmy,d2
  5550.  sub.w d2,d0
  5551.  
  5552.  cmp.w #127,d0
  5553.  blt nonegy
  5554.  move.w #255,d1
  5555.  sub.w d0,d1
  5556.  move.w d1,d0
  5557.  neg.w d0
  5558. nonegy:
  5559.  
  5560.  cmp.w #-127,d0
  5561.  bge nonegy2
  5562.  move.w #255,d1
  5563.  add.w d0,d1
  5564.  move.w d1,d0
  5565. nonegy2:
  5566.  
  5567.  add.b d0,d2
  5568.  add.w d0,oldy2
  5569.  move.w d2,oldmy
  5570.  move.w d2,d0
  5571.  
  5572.  move.w oldy2,d0
  5573.  move.w d0,ymouse
  5574.  
  5575.  clr.l d0
  5576.  clr.l d1
  5577.  move.w $a(a6),d0
  5578.  ext.w d0
  5579.  ext.l d0
  5580.  move.w d0,d3
  5581.  move.w oldmx,d2
  5582.  sub.w d2,d0
  5583.  
  5584.  cmp.w #127,d0
  5585.  blt nonegx
  5586.  move.w #255,d1
  5587.  sub.w d0,d1
  5588.  move.w d1,d0
  5589.  neg.w d0
  5590. nonegx:
  5591.  
  5592.  cmp.w #-127,d0
  5593.  bge nonegx2
  5594.  move.w #255,d1
  5595.  add.w d0,d1
  5596.  move.w d1,d0
  5597. nonegx2:
  5598.  
  5599.  add.b d0,d2
  5600.  move.w d0,d1
  5601.  move.w d2,oldmx
  5602.  
  5603.  move.w #$0,$dff034
  5604.  
  5605.  add.w d0,oldx2
  5606.  move.w oldx2,d0
  5607.  and.w #2047,d0
  5608.  move.w d0,oldx2
  5609.  
  5610.  asl.w #2,d0
  5611.  sub.w prevx,d0
  5612.  add.w d0,prevx
  5613.  add.w d0,angpos
  5614.  move.w #0,lrs
  5615.  rts
  5616.  
  5617. noturn:
  5618.  
  5619. ; got to move lr instead. 
  5620.  
  5621. ; d1 = speed moved l/r
  5622.  
  5623.  move.w d1,lrs
  5624.  
  5625.  rts
  5626.  
  5627. lrs: dc.w 0
  5628. prevx: dc.w 0
  5629.  
  5630. angpos: dc.w 0
  5631. mang: dc.w 0
  5632. oldymouse: dc.w 0
  5633. xmouse: dc.w 0
  5634. ymouse: dc.w 0
  5635. oldx2: dc.w 0
  5636. oldmx: dc.w 0
  5637. oldmy: dc.w 0
  5638. oldy2: dc.w 0
  5639.  
  5640. MAPON: dc.w $0
  5641. REALMAPON: dc.w 0
  5642.  
  5643. RotateLevelPts:
  5644.  
  5645.  tst.b REALMAPON
  5646.  beq ONLYTHELONELY
  5647.  
  5648.  move.w sinval,d6
  5649.  swap d6
  5650.  move.w cosval,d6
  5651.  move.l Points,a3
  5652.  move.l #Rotated,a1
  5653.  move.l #OnScreen,a2
  5654.  move.w xoff,d4
  5655.  move.w zoff,d5
  5656.  
  5657. ; move.w #$c40,$dff106
  5658. ; move.w #$f00,$dff180
  5659.  
  5660.  move.w NumLevPts,d7
  5661.  
  5662.  tst.b FULLSCR
  5663.  bne BIGALL
  5664.  
  5665. pointrotlop2:
  5666.  move.w (a3)+,d0
  5667.  sub.w d4,d0
  5668.  move.w d0,d2
  5669.  move.w (a3)+,d1
  5670.  sub.w d5,d1
  5671.  muls d6,d2
  5672.  swap d6
  5673.  move.w d1,d3
  5674.  muls d6,d3
  5675.  sub.l d3,d2
  5676.  add.l d2,d2
  5677.  swap d2
  5678.  ext.l d2
  5679.  asl.l #7,d2
  5680.  add.l xwobble,d2
  5681.  move.l d2,(a1)+
  5682.  
  5683.  muls d6,d0
  5684.  swap d6
  5685.  muls d6,d1
  5686.  add.l d0,d1
  5687.  asl.l #1,d1
  5688.  swap d1
  5689. ; ext.l d1
  5690. ; divs #3,d1
  5691.  move.l d1,(a1)+
  5692.  
  5693.  tst.w d1
  5694.  bgt.s ptnotbehind
  5695.  tst.w d2
  5696.  bgt.s onrightsomewhere
  5697.  move.w #0,d2
  5698.  bra putin
  5699. onrightsomewhere:
  5700.  move.w RIGHTX,d2
  5701.  bra putin
  5702. ptnotbehind:
  5703.  
  5704.  divs d1,d2
  5705.  add.w MIDDLEX,d2
  5706. putin:
  5707.  move.w d2,(a2)+
  5708.  
  5709.  dbra d7,pointrotlop2
  5710. outofpointrot:
  5711.   rts
  5712.  
  5713.  
  5714. BIGALL:
  5715.  
  5716. pointrotlop2B:
  5717.  move.w (a3)+,d0
  5718.  sub.w d4,d0
  5719.  move.w d0,d2
  5720.  move.w (a3)+,d1
  5721.  sub.w d5,d1
  5722.  muls d6,d2
  5723.  swap d6
  5724.  move.w d1,d3
  5725.  muls d6,d3
  5726.  sub.l d3,d2
  5727.  add.l d2,d2
  5728.  swap d2
  5729.  ext.l d2
  5730.  asl.l #7,d2
  5731.  add.l xwobble,d2
  5732.  move.l d2,(a1)+
  5733.  
  5734.  muls d6,d0
  5735.  swap d6
  5736.  muls d6,d1
  5737.  add.l d0,d1
  5738.  asl.l #2,d1
  5739.  swap d1
  5740.  ext.l d1
  5741.  divs #3,d1
  5742.  move.l d1,(a1)+
  5743.  
  5744.  tst.w d1
  5745.  bgt.s ptnotbehindB
  5746.  tst.w d2
  5747.  bgt.s onrightsomewhereB
  5748.  move.w #0,d2
  5749.  bra putinB
  5750. onrightsomewhereB:
  5751.  move.w RIGHTX,d2
  5752.  bra putinB
  5753. ptnotbehindB:
  5754.  
  5755.  divs d1,d2
  5756.  add.w MIDDLEX,d2
  5757. putinB:
  5758.  move.w d2,(a2)+
  5759.  
  5760.  dbra d7,pointrotlop2B
  5761.   rts
  5762.  
  5763.  
  5764. ONLYTHELONELY:
  5765.  
  5766.  move.w sinval,d6
  5767.  swap d6
  5768.  move.w cosval,d6
  5769.  
  5770.  move.l PointsToRotatePtr,a0
  5771.  move.l Points,a3
  5772.  move.l #Rotated,a1
  5773.  move.l #OnScreen,a2
  5774.  move.w xoff,d4
  5775.  move.w zoff,d5
  5776.  
  5777. ; move.w #$c40,$dff106
  5778. ; move.w #$f00,$dff180
  5779.  
  5780.  tst.b FULLSCR
  5781.  bne BIGLONELY
  5782.  
  5783. pointrotlop:
  5784.  move.w (a0)+,d7
  5785.  blt outofpointrot
  5786.  
  5787.  move.w (a3,d7*4),d0
  5788.  sub.w d4,d0
  5789.  move.w d0,d2
  5790.  move.w 2(a3,d7*4),d1
  5791.  sub.w d5,d1
  5792.  muls d6,d2
  5793.  swap d6
  5794.  move.w d1,d3
  5795.  muls d6,d3
  5796.  sub.l d3,d2
  5797.  add.l d2,d2
  5798.  swap d2
  5799.  ext.l d2
  5800.  asl.l #7,d2
  5801.  add.l xwobble,d2
  5802.  move.l d2,(a1,d7*8)
  5803.  
  5804.  muls d6,d0
  5805.  swap d6
  5806.  muls d6,d1
  5807.  add.l d0,d1
  5808.  asl.l #1,d1
  5809.  swap d1
  5810. ; ext.l d1
  5811. ; divs #3,d1
  5812.  move.l d1,4(a1,d7*8)
  5813.  
  5814.  tst.w d1
  5815.  bgt.s .ptnotbehind
  5816.  tst.w d2
  5817.  bgt.s .onrightsomewhere
  5818.  move.w #0,d2
  5819.  bra .putin
  5820. .onrightsomewhere:
  5821.  move.w RIGHTX,d2
  5822.  bra .putin
  5823. .ptnotbehind:
  5824.  
  5825.  divs d1,d2
  5826.  add.w MIDDLEX,d2
  5827. .putin:
  5828.  move.w d2,(a2,d7*2)
  5829.  
  5830.  bra pointrotlop
  5831.  
  5832. ; move.w #$c40,$dff106
  5833. ; move.w #$ff0,$dff180
  5834.  
  5835.  rts
  5836.  
  5837. BIGLONELY:
  5838.  
  5839. .pointrotlop:
  5840.  move.w (a0)+,d7
  5841.  blt.s .outofpointrot
  5842.  
  5843.  move.w (a3,d7*4),d0
  5844.  sub.w d4,d0
  5845.  move.w d0,d2
  5846.  move.w 2(a3,d7*4),d1
  5847.  sub.w d5,d1
  5848.  muls d6,d2
  5849.  swap d6
  5850.  move.w d1,d3
  5851.  muls d6,d3
  5852.  sub.l d3,d2
  5853.  add.l d2,d2
  5854.  swap d2
  5855.  ext.l d2
  5856.  asl.l #7,d2
  5857.  add.l xwobble,d2
  5858.  move.l d2,(a1,d7*8)
  5859.  
  5860.  muls d6,d0
  5861.  swap d6
  5862.  muls d6,d1
  5863.  add.l d0,d1
  5864.  asl.l #2,d1
  5865.  swap d1
  5866.  ext.l d1
  5867.  divs #3,d1
  5868.  move.l d1,4(a1,d7*8)
  5869.  
  5870.  tst.w d1
  5871.  bgt.s .ptnotbehind
  5872.  tst.w d2
  5873.  bgt.s .onrightsomewhere
  5874.  move.w #0,d2
  5875.  bra .putin
  5876. .onrightsomewhere:
  5877.  move.w RIGHTX,d2
  5878.  bra .putin
  5879. .ptnotbehind:
  5880.  
  5881.  divs d1,d2
  5882.  add.w MIDDLEX,d2
  5883. .putin:
  5884.  move.w d2,(a2,d7*2)
  5885.  
  5886.  bra .pointrotlop
  5887.  
  5888. .outofpointrot:
  5889. ; move.w #$c40,$dff106
  5890. ; move.w #$ff0,$dff180
  5891.  
  5892.  rts
  5893.  
  5894.  
  5895. PLR1_ObjDists
  5896.  ds.w 250
  5897. PLR2_ObjDists
  5898.  ds.w 250
  5899.  
  5900. CalcPLR1InLine:
  5901.  
  5902.  move.w PLR1_sinval,d5
  5903.  move.w PLR1_cosval,d6
  5904.  move.l ObjectData,a4
  5905.  move.l ObjectPoints,a0
  5906.  move.w NumObjectPoints,d7
  5907.  move.l #PLR1_ObsInLine,a2
  5908.  move.l #PLR1_ObjDists,a3
  5909.  
  5910. .objpointrotlop:
  5911.  
  5912.  cmp.b #3,16(a4)
  5913.  beq.s .itaux
  5914.  
  5915.  move.w (a0),d0
  5916.  sub.w PLR1_xoff,d0
  5917.  move.w 4(a0),d1
  5918.  addq #8,a0
  5919.  
  5920.  tst.w 12(a4)
  5921.  blt .noworkout
  5922.  
  5923.  moveq #0,d2
  5924.  move.b 16(a4),d2
  5925.  ;move.l #ColBoxTable,a6
  5926.  ;lea (a6,d2.w*8),a6
  5927.  
  5928.  sub.w PLR1_zoff,d1
  5929.  move.w d0,d2
  5930.  muls d6,d2
  5931.  move.w d1,d3
  5932.  muls d5,d3
  5933.  sub.l d3,d2
  5934.  add.l d2,d2
  5935.  
  5936.  bgt.s .okh
  5937.  neg.l d2
  5938. .okh:
  5939.  swap d2
  5940.  
  5941.  muls d5,d0
  5942.  muls d6,d1
  5943.  add.l d0,d1
  5944.  asl.l #2,d1
  5945.  swap d1
  5946.  moveq #0,d3
  5947.  
  5948.  tst.w d1
  5949.  ble.s .notinline
  5950.  asr.w #1,d2
  5951.  cmp.w #80,d2
  5952.  bgt.s .notinline
  5953.  
  5954.  st d3
  5955. .notinline
  5956.  move.b d3,(a2)+
  5957.  
  5958.  move.w d1,(a3)+
  5959.  
  5960.  add.w #64,a4
  5961.  dbra d7,.objpointrotlop
  5962.  
  5963.  rts
  5964.  
  5965. .itaux:
  5966.  add.w #64,a4
  5967.  bra .objpointrotlop
  5968.  
  5969. .noworkout:
  5970.  move.b #0,(a2)+
  5971.  move.w #0,(a3)+
  5972.  add.w #64,a4
  5973.  dbra d7,.objpointrotlop
  5974.  rts
  5975.  
  5976.  
  5977. CalcPLR2InLine:
  5978.  
  5979.  move.w PLR2_sinval,d5
  5980.  move.w PLR2_cosval,d6
  5981.  move.l ObjectData,a4
  5982.  move.l ObjectPoints,a0
  5983.  move.w NumObjectPoints,d7
  5984.  move.l #PLR2_ObsInLine,a2
  5985.  move.l #PLR2_ObjDists,a3
  5986.  
  5987. .objpointrotlop:
  5988.  
  5989.  cmp.b #3,16(a4)
  5990.  beq.s .itaux
  5991.  
  5992.  move.w (a0),d0
  5993.  sub.w PLR2_xoff,d0
  5994.  move.w 4(a0),d1
  5995.  addq #8,a0
  5996.  
  5997.  tst.w 12(a4)
  5998.  blt .noworkout
  5999.  
  6000.  moveq #0,d2
  6001.  move.b 16(a4),d2
  6002. ; move.l #ColBoxTable,a6
  6003. ; lea (a6,d2.w*8),a6
  6004.  
  6005.  sub.w PLR2_zoff,d1
  6006.  move.w d0,d2
  6007.  muls d6,d2
  6008.  move.w d1,d3
  6009.  muls d5,d3
  6010.  sub.l d3,d2
  6011.  add.l d2,d2
  6012.  
  6013.  bgt.s .okh
  6014.  neg.l d2
  6015. .okh:
  6016.  swap d2
  6017.  
  6018.  muls d5,d0
  6019.  muls d6,d1
  6020.  add.l d0,d1
  6021.  asl.l #2,d1
  6022.  swap d1
  6023.  moveq #0,d3
  6024.  
  6025.  tst.w d1
  6026.  ble.s .notinline
  6027.  asr.w #1,d2
  6028.  cmp.w (a6),d2
  6029.  bgt.s .notinline
  6030.  
  6031.  st d3
  6032. .notinline
  6033.  move.b d3,(a2)+
  6034.  
  6035.  move.w d1,(a3)+
  6036.  
  6037.  add.w #64,a4
  6038.  dbra d7,.objpointrotlop
  6039.  
  6040.  rts
  6041.  
  6042. .itaux:
  6043.  add.w #64,a4
  6044.  bra .objpointrotlop
  6045.  
  6046. .noworkout:
  6047.  move.w #0,(a3)+
  6048.  move.b #0,(a2)+
  6049.  add.w #64,a4
  6050.  dbra d7,.objpointrotlop
  6051.  rts
  6052.  
  6053.  
  6054. RotateObjectPts:
  6055.  
  6056.  move.w sinval,d5
  6057.  move.w cosval,d6
  6058.  
  6059.  move.l ObjectData,a4
  6060.  move.l ObjectPoints,a0
  6061.  move.w NumObjectPoints,d7
  6062.  move.l #ObjRotated,a1
  6063.  
  6064.  tst.b FULLSCR
  6065.  bne BIGOBJPTS
  6066.  
  6067.  
  6068. .objpointrotlop:
  6069.  
  6070.  cmp.b #3,16(a4)
  6071.  beq.s .itaux
  6072.  
  6073.  move.w (a0),d0
  6074.  sub.w xoff,d0
  6075.  move.w 4(a0),d1
  6076.  addq #8,a0
  6077.  
  6078.  tst.w 12(a4)
  6079.  blt .noworkout
  6080.  
  6081.  sub.w zoff,d1
  6082.  
  6083.  move.w d0,d2
  6084.  muls d6,d2
  6085.  move.w d1,d3
  6086.  muls d5,d3
  6087.  sub.l d3,d2
  6088.  
  6089.  
  6090.  add.l d2,d2
  6091.  swap d2
  6092.  move.w d2,(a1)+
  6093.  
  6094.  muls d5,d0
  6095.  muls d6,d1
  6096.  add.l d0,d1
  6097.  asl.l #1,d1
  6098.  swap d1
  6099. ; ext.l d1
  6100. ; divs #3,d1
  6101.  moveq #0,d3
  6102.  
  6103.  move.w d1,(a1)+
  6104.  ext.l d2
  6105.  asl.l #7,d2
  6106.  add.l xwobble,d2
  6107.  move.l d2,(a1)+
  6108.  
  6109.  dbra d7,.objpointrotlop
  6110.  
  6111.  rts
  6112.  
  6113. .itaux:
  6114.  add.w #64,a4
  6115.  bra .objpointrotlop
  6116.  
  6117. .noworkout:
  6118.   move.l #0,(a1)+
  6119.   move.l #0,(a1)+
  6120.   add.w #64,a4
  6121.   dbra d7,.objpointrotlop
  6122.   rts
  6123.   
  6124. BIGOBJPTS:
  6125.  
  6126. .objpointrotlop:
  6127.  
  6128.  cmp.b #3,16(a4)
  6129.  beq.s .itaux
  6130.  
  6131.  move.w (a0),d0
  6132.  sub.w xoff,d0
  6133.  move.w 4(a0),d1
  6134.  addq #8,a0
  6135.  
  6136.  tst.w 12(a4)
  6137.  blt .noworkout
  6138.  
  6139.  sub.w zoff,d1
  6140.  move.w d0,d2
  6141.  muls d6,d2
  6142.  move.w d1,d3
  6143.  muls d5,d3
  6144.  sub.l d3,d2
  6145.  
  6146.  
  6147.  add.l d2,d2
  6148.  swap d2
  6149.  move.w d2,(a1)+
  6150.  
  6151.  muls d5,d0
  6152.  muls d6,d1
  6153.  add.l d0,d1
  6154.  asl.l #2,d1
  6155.  swap d1
  6156.  ext.l d1
  6157.  divs #3,d1
  6158.  moveq #0,d3
  6159.  
  6160.  move.w d1,(a1)+
  6161.  ext.l d2
  6162.  asl.l #7,d2
  6163.  add.l xwobble,d2
  6164.  move.l d2,(a1)+
  6165.  sub.l xwobble,d2
  6166.  
  6167.  add.w #64,a4
  6168.  dbra d7,.objpointrotlop
  6169.  
  6170.  rts
  6171.  
  6172. .itaux:
  6173.  add.w #64,a4
  6174.  bra .objpointrotlop
  6175.  
  6176. .noworkout:
  6177.   move.l #0,(a1)+
  6178.   move.l #0,(a1)+
  6179.   add.w #64,a4
  6180.   dbra d7,.objpointrotlop
  6181.   rts
  6182.  
  6183. LightDraw:
  6184.  
  6185.  move.w (a0)+,d0
  6186.  move.w (a0)+,d1
  6187.  move.l #Rotated,a1
  6188.  move.w 6(a1,d0.w*8),d2
  6189.  ble.s oneendbehind
  6190.  move.w 6(a1,d1.w*8),d3
  6191.  bgt.s bothendsinfront
  6192.  
  6193. oneendbehind:
  6194.  rts
  6195. bothendsinfront:
  6196.  
  6197.  move.l #OnScreen,a2
  6198.  move.w (a2,d0.w*2),d0
  6199.  bge.s okleftend
  6200.  moveq #0,d0
  6201. okleftend:
  6202.  move.w (a2,d1.w*2),d1
  6203.  bgt.s somevis
  6204.  rts
  6205. somevis:
  6206.  cmp.w RIGHTX,d0
  6207.  blt.s somevis2
  6208.  rts
  6209. somevis2:
  6210.  cmp.w RIGHTX,d1
  6211.  blt.s okrightend
  6212.  move.w RIGHTX,d1
  6213.  subq #1,d1
  6214. okrightend:
  6215.  
  6216.  sub.w d0,d1
  6217.  blt.s wrongbloodywayround
  6218.  move.l #brightentab,a4
  6219.  move.l #objintocop,a1
  6220.  lea (a1,d0.w*2),a1
  6221.  
  6222.  move.l frompt,a3
  6223.  move.w #104*4,d6
  6224.  move.w #79,d2
  6225. lacross:
  6226.  move.w d2,d3
  6227.  move.l a3,a2
  6228.  adda.w (a1)+,a2
  6229. ldown:
  6230.  add.w d6,a2
  6231.  move.w (a2),d7
  6232.  move.w (a4,d7.w*2),(a2)
  6233.  dbra d3,ldown
  6234.  dbra d1,lacross
  6235.  
  6236. wrongbloodywayround:
  6237.  
  6238.  rts
  6239.  
  6240. FaceToPlace: dc.w 0
  6241.  
  6242. Cheese:
  6243.  dc.w 4,15
  6244.  
  6245. FacesList:
  6246.  dc.w 0,4*4
  6247.  dc.w 1,2*4
  6248.  dc.w 0,2*4
  6249.  dc.w 2,2*4
  6250.  dc.w 0,2*4
  6251.  dc.w 1,3*4
  6252.  dc.w 0,2*4
  6253.  dc.w 2,3*4
  6254.  dc.w 0,5*4
  6255.  dc.w 1,2*4
  6256.  dc.w 0,2*4
  6257.  dc.w 2,2*4
  6258.  dc.w 0,2*4
  6259.  dc.w 1,2*4
  6260.  dc.w 0,2*4
  6261.  dc.w 2,3*4
  6262.  dc.w 0,1*4
  6263.  dc.w 1,3*4
  6264.  dc.w 0,1*4
  6265.  dc.w 2,3*4
  6266.  dc.w 0,1*4
  6267.  
  6268. EndOfFacesList:
  6269.  
  6270. FacesPtr:
  6271.  dc.l FacesList
  6272. FacesCounter:
  6273.  dc.w 0
  6274. Expression:
  6275.  dc.w 0
  6276.  
  6277.  
  6278. Energy:
  6279.  dc.w 191
  6280. OldEnergy:
  6281.  dc.w 191
  6282. Ammo: dc.w 63
  6283. OldAmmo: dc.w 63
  6284.  
  6285. FullEnergy:
  6286. ; move.w #127,Energy
  6287. ; move.w #127,OldEnergy
  6288. ; move.l #health,a0
  6289. ; move.l #borders,a1
  6290. ; add.l #25*8*2+6,a1
  6291. ; lea 2592(a1),a2
  6292. ; move.w #127,d0
  6293. ;PutInFull:
  6294. ; move.b (a0)+,(a1)
  6295. ; move.b (a0)+,8(a1)
  6296. ; add.w #16,a1
  6297. ; move.b (a0)+,(a2)
  6298. ; move.b (a0)+,8(a2)
  6299. ; add.w #16,a2
  6300. ; dbra d0,PutInFull
  6301.  
  6302.  rts
  6303.  
  6304. ;EnergyBar:
  6305.  
  6306.  move.w Energy,d0
  6307.  bgt.s .noeneg
  6308.  move.w #0,d0
  6309. .noeneg:
  6310.  move.w d0,Energy
  6311.  
  6312.  cmp.w OldEnergy,d0
  6313.  bne.s gottochange
  6314.  
  6315. NoChange
  6316.  rts
  6317.  
  6318. gottochange:
  6319.   
  6320.  blt LessEnergy
  6321.  cmp.w #127,Energy
  6322.  blt.s NotMax
  6323.  move.w #127,Energy
  6324. NotMax:
  6325.  
  6326.  move.w Energy,d0
  6327.  move.w OldEnergy,d2
  6328.  sub.w d0,d2
  6329.  beq.s NoChange    
  6330.  neg.w d2
  6331.  
  6332.  move.w #127,d3
  6333.  sub.w d0,d3
  6334.  
  6335.  move.l #health,a0
  6336.  lea (a0,d3.w*4),a0
  6337. ; move.l #borders+25*16+6,a1
  6338.  lsl.w #4,d3
  6339.  add.w d3,a1
  6340.  lea 2592(a1),a2
  6341.  
  6342. EnergyRise:
  6343.  move.b (a0)+,(a1)
  6344.  move.b (a0)+,8(a1)
  6345.  add.w #16,a1
  6346.  move.b (a0)+,(a2)
  6347.  move.b (a0)+,8(a2)
  6348.  add.w #16,a2
  6349.  subq #1,d2
  6350.  bgt.s EnergyRise
  6351.  
  6352.  move.w Energy,OldEnergy
  6353.  
  6354.  rts 
  6355.  
  6356. LessEnergy: 
  6357.  move.w OldEnergy,d2
  6358.  sub.w d0,d2
  6359.  
  6360.  move.w #127,d3
  6361.  sub.w OldEnergy,d3
  6362.  
  6363. ; move.l #borders+25*16+6,a1
  6364.  asl.w #4,d3
  6365.  add.w d3,a1
  6366.  lea 2592(a1),a2
  6367.  
  6368. EnergyDrain:
  6369.  move.b #0,(a1)
  6370.  move.b #0,8(a1)
  6371.  move.b #0,(a2)
  6372.  move.b #0,8(a2)
  6373.  add.w #16,a1
  6374.  add.w #16,a2
  6375.  subq #1,d2
  6376.  bgt.s EnergyDrain
  6377.  
  6378.  move.w Energy,OldEnergy
  6379.  
  6380.  rts 
  6381.  
  6382. firstdigit: dc.b 0
  6383. secdigit: dc.b 0
  6384. thirddigit: dc.b 0
  6385.  
  6386.  even
  6387.  
  6388. gunny: dc.w 0
  6389.  
  6390. AmmoBar:
  6391.  
  6392. * Do guns first.
  6393.  
  6394.  move.l #borderchars,a4
  6395.  move.b p1_gunselected,d0 
  6396.  move.l #PLAYERONEGUNS,a5
  6397.  cmp.b #'s',mors
  6398.  bne.s .notplr2
  6399.  move.l #PLAYERTWOGUNS,a5
  6400.  move.b p2_gunselected,d0
  6401. .notplr2:
  6402.  
  6403.  move.b d0,gunny
  6404.  
  6405.  move.w #9,d2
  6406.  moveq #0,d0
  6407. putingunnums:
  6408.  move.w #4,d1
  6409.  move.l a4,a0
  6410.  cmp.b gunny,d0
  6411.  bne.s .notsel
  6412.  add.l #5*10*8*2,a0
  6413.  addq #2,a5
  6414.  bra.s .donesel
  6415. .notsel:
  6416.  tst.w (a5)+
  6417.  beq.s .donesel
  6418.  add.l #5*10*8,a0
  6419. .donesel:
  6420.  move.l SCRNDRAWPT,a1
  6421.  add.w d0,a1
  6422.  add.l #3+(240*40),a1
  6423.  bsr DRAWDIGIT
  6424.  addq #1,d0
  6425.  dbra d2,putingunnums
  6426.  
  6427.  move.w Ammo,d0
  6428.  ext.l d0
  6429.  divs #10,d0
  6430.  swap d0
  6431.  move.b d0,thirddigit
  6432.  swap d0
  6433.  ext.l d0
  6434.  divs #10,d0
  6435.  move.b d0,firstdigit
  6436.  swap d0
  6437.  move.b d0,secdigit
  6438.  
  6439.  move.l #borderchars+15*8*10,a0
  6440.  cmp.w #10,Ammo
  6441.  blt.s .notsmallamo
  6442.  add.l #7*8*10,a0
  6443. .notsmallamo:
  6444.  
  6445.  move.l SCRNDRAWPT,a1
  6446.  add.l #20+238*40,a1
  6447.  move.b firstdigit,d0
  6448.  move.w #6,d1
  6449.  bsr DRAWDIGIT
  6450.  
  6451.  move.l SCRNDRAWPT,a1
  6452.  add.l #21+238*40,a1
  6453.  move.b secdigit,d0
  6454.  move.w #6,d1
  6455.  bsr DRAWDIGIT
  6456.  
  6457.  move.l SCRNDRAWPT,a1
  6458.  add.l #22+238*40,a1
  6459.  move.b thirddigit,d0
  6460.  move.w #6,d1
  6461.  bsr DRAWDIGIT
  6462.  
  6463.  rts
  6464.  
  6465. EnergyBar:
  6466.  move.w Energy,d0
  6467.  bge.s .okpo
  6468.  moveq #0,d0 
  6469. .okpo:
  6470.  
  6471.  ext.l d0
  6472.  divs #10,d0
  6473.  swap d0
  6474.  move.b d0,thirddigit
  6475.  swap d0
  6476.  ext.l d0
  6477.  divs #10,d0
  6478.  move.b d0,firstdigit
  6479.  swap d0
  6480.  move.b d0,secdigit
  6481.  
  6482.  move.l #borderchars+15*8*10,a0
  6483.  cmp.w #10,Energy
  6484.  blt.s .notsmallamo
  6485.  add.l #7*8*10,a0
  6486. .notsmallamo:
  6487.  
  6488.  move.l SCRNDRAWPT,a1
  6489.  add.l #34+238*40,a1
  6490.  move.b firstdigit,d0
  6491.  move.w #6,d1
  6492.  bsr DRAWDIGIT
  6493.  
  6494.  move.l SCRNDRAWPT,a1
  6495.  add.l #35+238*40,a1
  6496.  move.b secdigit,d0
  6497.  move.w #6,d1
  6498.  bsr DRAWDIGIT
  6499.  
  6500.  move.l SCRNDRAWPT,a1
  6501.  add.l #36+238*40,a1
  6502.  move.b thirddigit,d0
  6503.  move.w #6,d1
  6504.  bsr DRAWDIGIT
  6505.  
  6506.  move.l SCRNSHOWPT,a1
  6507.  add.l #34+238*40,a1
  6508.  move.b firstdigit,d0
  6509.  move.w #6,d1
  6510.  bsr DRAWDIGIT
  6511.  
  6512.  move.l SCRNSHOWPT,a1
  6513.  add.l #35+238*40,a1
  6514.  move.b secdigit,d0
  6515.  move.w #6,d1
  6516.  bsr DRAWDIGIT
  6517.  
  6518.  move.l SCRNSHOWPT,a1
  6519.  add.l #36+238*40,a1
  6520.  move.b thirddigit,d0
  6521.  move.w #6,d1
  6522.  bsr DRAWDIGIT
  6523.  
  6524.  
  6525.  rts
  6526.  
  6527.  
  6528. DRAWDIGIT:
  6529.  ext.w d0
  6530.  lea (a0,d0.w),a2
  6531. charlines:
  6532.  lea 30720(a1),a3 
  6533.  move.b (a2),(a1)
  6534.  move.b 10(a2),10240(a1)
  6535.  move.b 20(a2),20480(a1)
  6536.  move.b 30(a2),(a3)
  6537.  move.b 40(a2),10240(a3)
  6538.  move.b 50(a2),20480(a3)
  6539.  lea 30720(a3),a3
  6540.  move.b 60(a2),(a3)
  6541.  move.b 70(a2),10240(a3)
  6542.  
  6543.  add.w #10*8,a2
  6544.  add.w #40,a1
  6545.  dbra d1,charlines
  6546.  
  6547.  rts
  6548.  
  6549. borderchars: incbin "ab3:includes/bordercharsRAW"
  6550.  
  6551. NARRATOR:
  6552.  
  6553. ; sub.w #1,NARRTIME
  6554. ; bge .NOCHARYET
  6555. ; move.w #3,NARRTIME
  6556.  
  6557.  move.l #SCROLLSCRN,d1
  6558.  move.w d1,scroll
  6559.  swap d1
  6560.  move.w d1,scrolh
  6561.  
  6562.  move.w SCROLLTIMER,d0
  6563.  subq #1,d0
  6564.  move.w d0,SCROLLTIMER
  6565.  cmp.w #40,d0
  6566.  bge .NOCHARYET
  6567.  tst.w d0
  6568.  bge.s .okcha
  6569.  
  6570.  move.w #150,SCROLLTIMER
  6571.  bra .NOCHARYET
  6572.  
  6573. .okcha:
  6574.  
  6575.  move.l #SCROLLSCRN,a0
  6576.  add.w SCROLLXPOS,a0
  6577.  
  6578.  moveq #1,d7
  6579. .doachar: 
  6580.  
  6581.  move.l SCROLLPOINTER,a1
  6582.  moveq #0,d1
  6583.  move.b (a1)+,d1    ; character
  6584.  move.l a1,d2
  6585.  cmp.l ENDSCROLL,d2
  6586.  blt.s .notrestartscroll
  6587.  move.l #BLANKSCROLL,a1
  6588.  move.l #BLANKSCROLL+80,ENDSCROLL
  6589. .notrestartscroll
  6590.  move.l a1,SCROLLPOINTER
  6591.  
  6592.  move.l #SCROLLCHARS,a1
  6593.  asl.w #3,d1
  6594.  add.w d1,a1
  6595.  
  6596.  move.b (a1)+,(a0)
  6597.  move.b (a1)+,80(a0)
  6598.  move.b (a1)+,80*2(a0)
  6599.  move.b (a1)+,80*3(a0)
  6600.  move.b (a1)+,80*4(a0)
  6601.  move.b (a1)+,80*5(a0)
  6602.  move.b (a1)+,80*6(a0)
  6603.  move.b (a1)+,80*7(a0)
  6604.  
  6605.  addq #1,a0
  6606.  dbra d7,.doachar
  6607.  
  6608.  move.w SCROLLXPOS,d0
  6609.  addq #2,d0
  6610.  move.w d0,SCROLLXPOS
  6611.  cmp.w #80,d0
  6612.  blt .NOCHARYET
  6613.  move.w #0,SCROLLXPOS
  6614.  
  6615. .NOCHARYET:
  6616.  rts
  6617.  
  6618. ; cmp.w OldAmmo,d0
  6619. ; bne.s .gottochange
  6620.  
  6621. NARRTIME: dc.w 5
  6622.  
  6623. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6624.  
  6625. .NoChange
  6626.  rts
  6627.  
  6628. .gottochange:
  6629.   
  6630.  blt LessAmmo
  6631.  cmp.w #63,Ammo
  6632.  blt.s .NotMax
  6633.  move.w #63,Ammo
  6634. .NotMax:
  6635.  
  6636.  move.w Ammo,d0
  6637.  move.w OldAmmo,d2
  6638.  sub.w d0,d2
  6639.  beq.s .NoChange
  6640.  neg.w d2
  6641.  
  6642.  move.w #63,d3
  6643.  sub.w d0,d3
  6644.  
  6645.  move.l #Ammunition,a0
  6646.  lea (a0,d3.w*8),a0
  6647. ; move.l #borders+5184+25*16+1,a1
  6648.  lsl.w #5,d3
  6649.  add.w d3,a1
  6650.  lea 2592(a1),a2
  6651.  
  6652. AmmoRise:
  6653.  move.b (a0)+,(a1)
  6654.  move.b (a0)+,8(a1)
  6655.  add.w #16,a1
  6656.  move.b (a0)+,(a2)
  6657.  move.b (a0)+,8(a2)
  6658.  add.w #16,a2
  6659.  move.b (a0)+,(a1)
  6660.  move.b (a0)+,8(a1)
  6661.  add.w #16,a1
  6662.  move.b (a0)+,(a2)
  6663.  move.b (a0)+,8(a2)
  6664.  add.w #16,a2
  6665.  subq #1,d2
  6666.  bgt.s AmmoRise
  6667.  
  6668.  move.w Ammo,OldAmmo
  6669.  
  6670.  rts 
  6671.  
  6672.  
  6673. LessAmmo: 
  6674.  move.w OldAmmo,d2
  6675.  sub.w d0,d2
  6676.  
  6677.  move.w #63,d3
  6678.  sub.w OldAmmo,d3
  6679.  
  6680. ; move.l #borders++5184+25*16+1,a1
  6681.  asl.w #5,d3
  6682.  add.w d3,a1
  6683.  lea 2592(a1),a2
  6684.  
  6685. AmmoDrain:
  6686.  move.b #0,(a1)
  6687.  move.b #0,8(a1)
  6688.  move.b #0,(a2)
  6689.  move.b #0,8(a2)
  6690.  add.w #16,a1
  6691.  add.w #16,a2
  6692.  move.b #0,(a1)
  6693.  move.b #0,8(a1)
  6694.  move.b #0,(a2)
  6695.  move.b #0,8(a2)
  6696.  add.w #16,a1
  6697.  add.w #16,a2
  6698.  subq #1,d2
  6699.  bgt.s AmmoDrain
  6700.  
  6701.  move.w Ammo,OldAmmo
  6702.  
  6703.  rts 
  6704.  
  6705. nulop:
  6706.  move.w #$0010,$dff000+intreq
  6707.  rte
  6708.  
  6709. doanything: dc.w 0
  6710.  
  6711. end:
  6712. ;     _break #0
  6713.  
  6714.  
  6715.  move.l #$dff000,a6
  6716.  move.w #$f,$dff000+dmacon
  6717. waitfortop22:
  6718.  btst.b #0,intreqrl(a6)
  6719.  beq waitfortop22
  6720. waitfortop222:
  6721.  btst.b #0,intreqrl(a6)
  6722.  beq waitfortop222
  6723.  
  6724.  clr.b dosounds
  6725.  clr.b doanything
  6726.  
  6727.  move.w PLAYERONEHEALTH,Energy
  6728.  cmp.b #'s',mors
  6729.  bne.s .notsl
  6730.  move.w PLAYERTWOHEALTH,Energy
  6731. .notsl:
  6732.  
  6733.  move.l drawpt,d0
  6734.  move.l olddrawpt,drawpt
  6735.  move.l d0,olddrawpt
  6736.  
  6737. ; cmp.b #'b',Prefsfile+3
  6738. ; bne.s .noback
  6739. ; jsr mt_end
  6740. ;.noback
  6741.  
  6742.  tst.w Energy
  6743.  bgt.s wevewon
  6744.  move.w #0,Energy
  6745.  bsr EnergyBar
  6746.  
  6747.  move.l #gameover,mt_data
  6748.  st UseAllChannels
  6749.  clr.b reachedend
  6750.  jsr mt_init
  6751. playgameover:
  6752.  move.l #$dff000,a6
  6753. waitfortop2:
  6754.  
  6755.     
  6756.  btst.b #0,intreqrl(a6)
  6757.  beq waitfortop2
  6758.  move.w #$1,intreq(a6)
  6759.  
  6760.     
  6761.  jsr mt_music
  6762.  
  6763.  
  6764.     
  6765.  tst.b reachedend
  6766.  beq.s playgameover
  6767.  
  6768.  bra wevelost
  6769.  
  6770.  
  6771. wevewon:
  6772.  
  6773.  
  6774.  bsr EnergyBar
  6775.  
  6776.  cmp.b #'n',mors
  6777.  bne.s .nonextlev
  6778.  add.w #1,MAXLEVEL
  6779.  st FINISHEDLEVEL
  6780. .nonextlev:
  6781.  
  6782.  move.l #welldone,mt_data
  6783.  st UseAllChannels
  6784.  clr.b reachedend
  6785.  
  6786.  jsr mt_init
  6787. playwelldone:
  6788.  move.l #$dff000,a6
  6789. waitfortop3:
  6790.  btst.b #0,intreqrl(a6)
  6791.  beq waitfortop3
  6792.  move.w #$1,intreq(a6)
  6793.  
  6794.  jsr mt_music
  6795.  
  6796.  tst.b reachedend
  6797.  beq.s playwelldone
  6798.  
  6799. wevelost:
  6800.  
  6801.  PROTICHECK a0
  6802.  
  6803.  jmp closeeverything 
  6804.  
  6805. endnomusic
  6806.  clr.b doanything
  6807.  
  6808. ; cmp.b #'b',Prefsfile+3
  6809. ; bne.s .noback
  6810. ; jsr mt_end
  6811. ;.noback
  6812. *******************************
  6813. ; cmp.b #'n',mors
  6814. ; bne.s .nonextlev
  6815. ; cmp.w #15,MAXLEVEL
  6816. ; bge.s .nonextlev
  6817. ; add.w #1,MAXLEVEL
  6818. ; st FINISHEDLEVEL
  6819. ;.nonextlev:
  6820. ******************************
  6821.  
  6822.  jmp closeeverything
  6823.  
  6824. do32:
  6825.  move.w #31,d7
  6826.  move.w #$180,d1
  6827. across:
  6828.  move.w d1,(a1)+
  6829.  move.w d1,(a3)+
  6830.  move.w #0,(a1)+ 
  6831.  move.w #0,(a3)+
  6832.  add.w #2,d1
  6833.  dbra d7,across
  6834.  rts
  6835.  
  6836. string:
  6837.     dc.b    'credits',0
  6838.  
  6839. ENDGAMESCROLL:
  6840.  
  6841.     move.l    4.w,a6
  6842.     move.l    #string,d1
  6843.     moveq    #0,d2
  6844.     moveq    #0,d3
  6845.     jsr    _LVOExecute(a6)
  6846.  
  6847. ; include "endscroll.s"
  6848.  
  6849. ***********************************
  6850.  include "ab3:source_4000/CD32JOY"
  6851.  
  6852.  
  6853.  
  6854. *************************************
  6855. * Set left and right clip values
  6856. *************************************
  6857.  
  6858.  
  6859.  
  6860. NEWsetlclip:
  6861.  move.l #OnScreen,a1
  6862.  move.l #Rotated,a2
  6863.  move.l CONNECT_TABLE,a3
  6864.  move.l Points,a4
  6865.  
  6866.  move.w (a0),d0
  6867.  bge.s .notignoreleft
  6868.  
  6869. ; move.l #0,(a6)
  6870.  
  6871.  bra .leftnotoktoclip
  6872. .notignoreleft:
  6873.  
  6874.  move.w 6(a2,d0*8),d3    ; left z val
  6875.  bgt.s .leftclipinfront
  6876.  addq #2,a0
  6877.  rts
  6878.  
  6879.  tst.w 6(a2,d0*8)
  6880.  bgt.s .leftnotoktoclip
  6881. .ignoreboth:
  6882. ; move.l #0,(a6)
  6883. ; move.l #96*65536,4(a6)
  6884.  move.w #0,leftclip
  6885.  move.w RIGHTX,rightclip
  6886.  addq #8,a6
  6887.  addq #2,a0
  6888.  rts
  6889.  
  6890. .leftclipinfront:
  6891.  move.w (a1,d0*2),d1    ; left x on screen
  6892.  move.w (a0),d2
  6893.  move.w 2(a3,d2.w*4),d2
  6894.  move.w (a1,d2.w*2),d2
  6895.  cmp.w d1,d2
  6896.  bgt.s .leftnotoktoclip
  6897.  
  6898.  
  6899. *************************************
  6900.  
  6901.  move.w 2(a3,d0.w*4),d6
  6902.  
  6903.  move.w (a4,d0.w*4),d2
  6904.  move.w 2(a4,d0.w*4),d3
  6905.  move.w (a4,d6.w*4),d4
  6906.  move.w 2(a4,d6.w*4),d5
  6907.  
  6908.  sub.w d2,d4    ;dx
  6909.  sub.w d3,d5    ;dz
  6910.  move.w xoff,d0
  6911.  move.w zoff,d6
  6912.  
  6913.  sub.w d2,d0
  6914.  sub.w d3,d6
  6915.  
  6916.  muls d0,d4
  6917.  muls d6,d5
  6918.  add.l d4,d5
  6919.  bge.s .leftnotoktoclip
  6920.  
  6921. *************************************
  6922.  
  6923.  
  6924.  
  6925. ; move.w d1,(a6)
  6926. ; move.w d3,2(a6)
  6927.  cmp.w leftclip,d1
  6928.  ble.s .leftnotoktoclip
  6929.  move.w d1,leftclip
  6930. .leftnotoktoclip:
  6931.  
  6932.  addq #2,a0
  6933.  
  6934.  rts
  6935.  
  6936. NEWsetrclip
  6937.  move.l #OnScreen,a1
  6938.  move.l #Rotated,a2
  6939.  move.l CONNECT_TABLE,a3
  6940.  move.w (a0),d0
  6941.  bge.s .notignoreright
  6942. ; move.w #96,4(a6)
  6943. ; move.w #0,6(a6)
  6944.  move.w #0,d4
  6945.  bra .rightnotoktoclip
  6946. .notignoreright:
  6947.  move.w 6(a2,d0*8),d4    ; right z val
  6948.  bgt.s .rightclipinfront
  6949. ; move.w #96,4(a6)
  6950. ; move.w #0,6(a6)
  6951.  bra.s .rightnotoktoclip
  6952.  
  6953. .rightclipinfront:
  6954.  move.w (a1,d0*2),d1    ; right x on screen
  6955.  move.w (a0),d2
  6956.  move.w (a3,d2.w*4),d2
  6957.  move.w (a1,d2.w*2),d2
  6958.  cmp.w d1,d2
  6959.  blt.s .rightnotoktoclip
  6960. ; move.w d1,4(a6)
  6961. ; move.w d4,6(a6)
  6962.  
  6963.  
  6964. *************************************
  6965.  
  6966.  move.w (a3,d0.w*4),d6
  6967.  
  6968.  move.w (a4,d0.w*4),d2
  6969.  move.w 2(a4,d0.w*4),d3
  6970.  move.w (a4,d6.w*4),d4
  6971.  move.w 2(a4,d6.w*4),d5
  6972.  
  6973.  sub.w d2,d4    ;dx
  6974.  sub.w d3,d5    ;dz
  6975.  move.w xoff,d0
  6976.  move.w zoff,d6
  6977.  
  6978.  sub.w d2,d0
  6979.  sub.w d3,d6
  6980.  
  6981.  muls d0,d4
  6982.  muls d6,d5
  6983.  add.l d4,d5
  6984.  ble.s .rightnotoktoclip
  6985.  
  6986. *************************************
  6987.  
  6988.  
  6989.  
  6990.  cmp.w rightclip,d1
  6991.  bge.s .rightnotoktoclip
  6992.  addq #1,d1
  6993.  move.w d1,rightclip
  6994. .rightnotoktoclip:
  6995.  addq #8,a6
  6996.  addq #2,a0
  6997.  rts
  6998.  
  6999. FIRSTsetlrclip:
  7000.  move.l #OnScreen,a1
  7001.  move.l #Rotated,a2
  7002.  
  7003.  move.w (a0)+,d0
  7004.  bge.s .notignoreleft
  7005.  bra .leftnotoktoclip
  7006. .notignoreleft:
  7007.  
  7008.  move.w 6(a2,d0*8),d3    ; left z val
  7009.  bgt.s .leftclipinfront
  7010.  
  7011.  move.w (a0),d0
  7012.  blt.s .ignoreboth
  7013.  tst.w 6(a2,d0*8)
  7014.  bgt.s .leftnotoktoclip
  7015. .ignoreboth
  7016.  move.w RIGHTX,rightclip
  7017.  move.w #0,leftclip
  7018.  addq #2,a0
  7019.  rts
  7020.  
  7021. .leftclipinfront:
  7022.  move.w (a1,d0*2),d1    ; left x on screen
  7023.  cmp.w leftclip,d1
  7024.  ble.s .leftnotoktoclip
  7025.  move.w d1,leftclip
  7026. .leftnotoktoclip:
  7027.  
  7028.  move.w (a0)+,d0
  7029.  bge.s .notignoreright
  7030.  move.w #0,d4
  7031.  bra .rightnotoktoclip
  7032. .notignoreright:
  7033.  move.w 6(a2,d0*8),d4    ; right z val
  7034.  ble.s .rightnotoktoclip
  7035.  
  7036. .rightclipinfront:
  7037.  move.w (a1,d0*2),d1    ; right x on screen
  7038.  addq #1,d1
  7039.  cmp.w rightclip,d1
  7040.  bge.s .rightnotoktoclip
  7041.  move.w d1,rightclip
  7042. .rightnotoktoclip:
  7043.  
  7044. ; move.w leftclip,d0
  7045. ; move.w rightclip,d1
  7046. ; cmp.w d0,d1
  7047. ; bge.s .noswap
  7048. ; move.w #192,rightclip
  7049. ; move.w #0,leftclip
  7050. ;.noswap:
  7051.  
  7052.  rts
  7053.  
  7054.  
  7055. leftclip2: dc.w 0
  7056. rightclip2: dc.w 0
  7057. ZoneBright: dc.w 0
  7058.  
  7059. npolys: dc.w 0
  7060.  
  7061. PLR1_fire: dc.b 0
  7062. PLR2_fire: dc.b 0
  7063.  
  7064. *****************************************************
  7065.  
  7066.  
  7067. pastdata:
  7068. ***********************************
  7069. * This routine animates brightnesses.
  7070.  
  7071.  
  7072. liftpt: dc.l liftanimtab
  7073.  
  7074. brightpt:
  7075.  dc.l brightanimtab
  7076.  
  7077.  
  7078. liftanim:
  7079.  rts
  7080.  
  7081. ******************************
  7082.  include "ab3:source_4000/ObjectMove"
  7083.  include "ab3:source_4000/newAnims"
  7084.  include "ab3:source_4000/airoutine.s"
  7085. ******************************
  7086. startpass:
  7087. ; include "ab3:source_4000/password_reloc.s"
  7088. endpass:
  7089.  
  7090. rotanimpt: dc.w 0
  7091. xradd: dc.w 5
  7092. yradd: dc.w 8
  7093. xrpos: dc.w 320
  7094. yrpos: dc.w 320
  7095.  
  7096. rotanim:
  7097.  rts
  7098.  
  7099. option:
  7100.  dc.l 0,0
  7101.  
  7102. ********** WALL STUFF *******************************
  7103.  
  7104.  include "AB3:source_4000/hireswall.s"
  7105.  include "AB3:source_4000/hiresgourwall.s"
  7106.  
  7107. *****************************************************
  7108.  
  7109. ******************************************
  7110. * floor polygon
  7111.  
  7112. numsidestd: dc.w 0
  7113. bottomline: dc.w 0
  7114.  
  7115. checkforwater:
  7116.  tst.b usewater
  7117.  beq.s .notwater
  7118.  
  7119.  move.l Roompt,a1
  7120.  move.w (a1),d7
  7121.  cmp.w currzone,d7
  7122.  bne.s .notwater
  7123.  
  7124.  move.b #$f,fillscrnwater
  7125.  
  7126. .notwater:
  7127.  move.w (a0)+,d6    ; sides-1
  7128.  add.w d6,d6
  7129.  add.w d6,a0
  7130.  add.w #4+6,a0
  7131.  rts
  7132.  
  7133.  rts
  7134.  
  7135. ;NewCornerBuff:
  7136. ; ds.l 100
  7137. CLRNOFLOOR: dc.w 0
  7138.  
  7139. itsafloordraw:
  7140.  
  7141. * If D0 =1 then its a floor otherwise (=2) it's
  7142. * a roof.
  7143.  
  7144.  move.w #0,above
  7145.  move.w (a0)+,d6    ; ypos of poly
  7146.  
  7147.  tst.b usewater
  7148.  beq.s .oknon
  7149.  tst.b DOANYWATER
  7150.  beq dontdrawreturn
  7151. .oknon
  7152.  
  7153.  move.w d6,d7
  7154.  ext.l d7
  7155.  asl.l #6,d7
  7156.  cmp.l TOPOFROOM,d7
  7157.  blt checkforwater
  7158.  cmp.l BOTOFROOM,d7
  7159.  bgt.s dontdrawreturn
  7160.  
  7161.  move.w leftclip,d7
  7162.  cmp.w rightclip,d7
  7163.  bge.s dontdrawreturn
  7164.  
  7165.  sub.w flooryoff,d6
  7166.  bgt.s below
  7167.  blt.s aboveplayer
  7168.  
  7169.  tst.b usewater
  7170.  beq.s .notwater
  7171.  
  7172.  move.l Roompt,a1
  7173.  move.w (a1),d7
  7174.  cmp.w currzone,d7
  7175.  
  7176.  bne.s .notwater
  7177.  
  7178.  st fillscrnwater
  7179.  
  7180. .notwater:
  7181.  
  7182.  
  7183. dontdrawreturn:
  7184.  move.w (a0)+,d6    ; sides-1
  7185.  add.w d6,d6
  7186.  add.w d6,a0
  7187.  add.w #4+6,a0
  7188.  rts
  7189. aboveplayer:
  7190.  
  7191.  tst.b usewater
  7192.  beq.s .notwater
  7193.  
  7194.  move.l Roompt,a1
  7195.  move.w (a1),d7
  7196.  cmp.w currzone,d7
  7197.  bne.s .notwater
  7198.  
  7199.  move.b #$f,fillscrnwater
  7200.  
  7201. .notwater:
  7202.  
  7203.  btst #1,d0
  7204.  beq.s dontdrawreturn
  7205.  move.w MIDDLEY,d7
  7206.  sub.w topclip,d7 
  7207.  ble.s dontdrawreturn
  7208.  move.w #1,d0
  7209.  move.w d0,above
  7210.  neg.w d6
  7211.  bra.s notbelow
  7212. below:
  7213.  move.w botclip,d7
  7214.  sub.w MIDDLEY,d7
  7215.  ble.s dontdrawreturn
  7216. notbelow:
  7217.  btst #0,d0
  7218.  beq.s dontdrawreturn
  7219.  move.w d6,distaddr
  7220.  muls #64,d6
  7221.  move.l d6,ypos
  7222.  ext.l d7
  7223.  divs.l d7,d6        ; zpos of bottom
  7224.             ; visible line
  7225.  
  7226.  beq dontdrawreturn
  7227.  
  7228.  cmp.l #32767,d6
  7229.  bgt dontdrawreturn
  7230.             
  7231.  move.w d6,minz
  7232.  move.w d7,bottomline
  7233.  
  7234. ; Go round each point finding out
  7235. ; if it should be visible or not.
  7236.  
  7237.  move.l a0,-(a7)
  7238.  
  7239.  move.w (a0)+,d7    ; number of sides
  7240.  move.l #Rotated,a1
  7241.  move.l #OnScreen,a2
  7242. ; move.l #NewCornerBuff,a3
  7243.  moveq #0,d4
  7244.  moveq #0,d5
  7245.  moveq #0,d6
  7246.  clr.b anyclipping
  7247.  
  7248. cornerprocessloop:
  7249.  
  7250.  move.w (a0)+,d0
  7251.  and.w #$fff,d0
  7252.  move.w 6(a1,d0.w*8),d1
  7253.  ble  .canttell
  7254.  
  7255.  move.w (a2,d0.w*2),d3
  7256.  cmp.w leftclip,d3
  7257.  bgt.s .nol
  7258.  st d4
  7259.  st anyclipping
  7260.  bra.s .nos
  7261. .nol:
  7262.  cmp.w rightclip,d3
  7263.  blt.s .nor
  7264.  st d6
  7265.  st anyclipping
  7266.  bra.s .nos
  7267. .nor:
  7268.  st d5
  7269. .nos:
  7270.  bra .cantell
  7271.  
  7272. .canttell:
  7273.  st d5
  7274.  st anyclipping
  7275.  
  7276. .cantell:
  7277.  
  7278.  
  7279.  dbra d7,cornerprocessloop
  7280.  
  7281.  
  7282.  move.l (a7)+,a0
  7283.  tst.b d5
  7284.  bne.s somefloortodraw
  7285.  eor.b d4,d6
  7286.  bne dontdrawreturn
  7287.  
  7288. somefloortodraw:
  7289.  
  7290.  tst.b gourfloor
  7291.  bne goursides
  7292.  
  7293.  move.w #300,top
  7294.  move.w #-1,bottom
  7295.  move.w #0,drawit
  7296.  move.l #Rotated,a1
  7297.  move.l #OnScreen,a2
  7298.  move.w (a0)+,d7    ; no of sides
  7299. sideloop:
  7300.  move.w minz,d6
  7301.  move.w (a0)+,d1
  7302.  move.w (a0),d3
  7303.  and.w #$fff,d1
  7304.  and.w #$fff,d3
  7305.  
  7306.  move.w 6(a1,d1*8),d4    ;first z
  7307.  cmp.w d6,d4
  7308.  bgt firstinfront
  7309.  move.w 6(a1,d3*8),d5    ; sec z
  7310.  cmp.w d6,d5
  7311.  ble bothbehind
  7312. ** line must be on left and partially behind.
  7313.  sub.w d5,d4
  7314.  move.l (a1,d1*8),d0
  7315.  sub.l (a1,d3*8),d0
  7316.  asr.l #7,d0
  7317.  sub.w d5,d6
  7318.  muls d6,d0    ; new x coord
  7319.  divs d4,d0
  7320.  ext.l d0
  7321.  asl.l #7,d0
  7322.  
  7323.  add.l (a1,d3*8),d0
  7324.  move.w minz,d4
  7325.  move.w (a2,d3*2),d2
  7326.  divs d4,d0
  7327.  add.w MIDDLEX,d0
  7328.  move.l ypos,d3
  7329.  divs d5,d3
  7330.  move.w bottomline,d1 
  7331.  bra lineclipped
  7332.  
  7333. firstinfront:
  7334.  move.w 6(a1,d3*8),d5    ; sec z
  7335.  cmp.w d6,d5
  7336.  bgt bothinfront
  7337. ** line must be on right and partially behind.
  7338.  sub.w d4,d5    ; dz
  7339.  move.l (a1,d3*8),d2
  7340.  sub.l (a1,d1*8),d2    ; dx
  7341.  sub.w d4,d6
  7342.  asr.l #7,d2
  7343.  muls d6,d2    ; new x coord
  7344.  divs d5,d2
  7345.  ext.l d2
  7346.  asl.l #7,d2
  7347.  add.l (a1,d1*8),d2
  7348.  move.w minz,d5
  7349.  move.w (a2,d1*2),d0
  7350.  divs d5,d2
  7351.  add.w MIDDLEX,d2
  7352.  move.l ypos,d1
  7353.  divs d4,d1
  7354.  move.w bottomline,d3 
  7355.  bra lineclipped
  7356.  
  7357. bothinfront:
  7358.  
  7359. * Also, usefully enough, both are on-screen
  7360. * so no bottom clipping is needed.
  7361.  
  7362.  move.w (a2,d1*2),d0    ; first x
  7363.  move.w (a2,d3*2),d2    ; second x
  7364.  move.l ypos,d1
  7365.  move.l d1,d3
  7366.  divs d4,d1        ; first y
  7367.  divs d5,d3        ; second y
  7368. lineclipped:
  7369.  move.l #rightsidetab,a3
  7370.  cmp.w d1,d3
  7371.  beq lineflat
  7372.  st drawit
  7373.  bgt lineonright
  7374.  move.l #leftsidetab,a3
  7375.  exg d1,d3
  7376.  exg d0,d2
  7377.  
  7378.  lea (a3,d1*2),a3
  7379.  
  7380.  cmp.w top(pc),d1
  7381.  bge.s .nonewtop
  7382.  move.w d1,top
  7383. .nonewtop:
  7384.  cmp.w bottom(pc),d3
  7385.  ble.s .nonewbot
  7386.  move.w d3,bottom
  7387. .nonewbot:
  7388.  
  7389.  sub.w d1,d3    ; dy
  7390.  sub.w d0,d2    ; dx
  7391.  
  7392.  blt .linegoingleft
  7393.  
  7394.  ext.l d2
  7395.  divs d3,d2
  7396.  move.w d2,d6
  7397.  swap d2
  7398.  
  7399. ; moveq #0,d6
  7400. ; sub.w d3,d2
  7401. ; blt.s .noco
  7402. ;.makeco
  7403. ; addq #1,d6
  7404. ; sub.w d3,d2
  7405. ; bge.s .makeco
  7406. ;.noco
  7407. ; add.w d3,d2
  7408.  
  7409.  move.w d3,d4
  7410.  move.w d3,d5
  7411.  subq #1,d5
  7412.  move.w d6,d1
  7413.  addq #1,d1
  7414.  
  7415. .pixlopright:
  7416.  move.w d0,(a3)+
  7417.  sub.w d2,d4
  7418.  bge.s .nobigstep
  7419.  add.w d1,d0
  7420.  add.w d3,d4
  7421.  dbra d5,.pixlopright
  7422.  bra lineflat
  7423. .nobigstep
  7424.  add.w d6,d0
  7425.  dbra d5,.pixlopright
  7426.  bra lineflat
  7427.  
  7428. .linegoingleft:
  7429.  
  7430.  neg.w d2
  7431.  
  7432.  ext.l d2
  7433.  divs d3,d2
  7434.  move.w d2,d6
  7435.  swap d2
  7436.  
  7437.  
  7438. ; moveq #0,d6
  7439. ; sub.w d3,d2
  7440. ; blt.s .nocol
  7441. ;.makecol
  7442. ; addq #1,d6
  7443. ; sub.w d3,d2
  7444. ; bge.s .makecol
  7445. ;.nocol
  7446. ; add.w d3,d2
  7447.  
  7448.  
  7449.  
  7450.  move.w d3,d4
  7451.  move.w d3,d5
  7452.  subq #1,d5
  7453.  
  7454.  move.w d6,d1
  7455.  addq #1,d1
  7456.  
  7457. .pixlopleft:
  7458.  sub.w d2,d4
  7459.  bge.s .nobigstepl
  7460.  sub.w d1,d0
  7461.  add.w d3,d4
  7462.  move.w d0,(a3)+
  7463.  dbra d5,.pixlopleft
  7464.  bra lineflat
  7465.  
  7466. .nobigstepl
  7467.  sub.w d6,d0
  7468.  move.w d0,(a3)+
  7469.  dbra d5,.pixlopleft
  7470.  bra lineflat
  7471.  
  7472. lineonright:
  7473.  
  7474.  lea (a3,d1*2),a3
  7475.  
  7476.  cmp.w top(pc),d1
  7477.  bge.s .nonewtop
  7478.  move.w d1,top
  7479. .nonewtop:
  7480.  cmp.w bottom(pc),d3
  7481.  ble.s .nonewbot
  7482.  move.w d3,bottom
  7483. .nonewbot:
  7484.  
  7485.  sub.w d1,d3    ; dy
  7486.  sub.w d0,d2    ; dx
  7487.  blt .linegoingleft
  7488. ; addq #1,d0
  7489.  ext.l d2
  7490.  divs d3,d2
  7491.  move.w d2,d6
  7492.  swap d2
  7493.  
  7494. ; moveq #0,d6
  7495. ; sub.w d3,d2
  7496. ; blt.s .noco
  7497. ;.makeco
  7498. ; addq #1,d6
  7499. ; sub.w d3,d2
  7500. ; bge.s .makeco
  7501. ;.noco
  7502. ; add.w d3,d2
  7503.  
  7504.  move.w d3,d4
  7505.  move.w d3,d5
  7506.  subq #1,d5
  7507.  move.w d6,d1
  7508.  addq #1,d1
  7509.  
  7510. .pixlopright:
  7511.  sub.w d2,d4
  7512.  bge.s .nobigstep
  7513.  add.w d1,d0
  7514.  add.w d3,d4
  7515.  move.w d0,(a3)+
  7516.  dbra d5,.pixlopright
  7517.  bra lineflat
  7518.  
  7519. .nobigstep
  7520.  add.w d6,d0
  7521.  move.w d0,(a3)+
  7522.  dbra d5,.pixlopright
  7523.  bra lineflat
  7524.  
  7525. .linegoingleft:
  7526. ; addq #1,d0
  7527.  neg.w d2
  7528.  
  7529.  ext.l d2
  7530.  divs d3,d2
  7531.  move.w d2,d6
  7532.  swap d2
  7533.  
  7534.  
  7535. ; moveq #0,d6
  7536. ; sub.w d3,d2
  7537. ; blt.s .nocol
  7538. ;.makecol
  7539. ; addq #1,d6
  7540. ; sub.w d3,d2
  7541. ; bge.s .makecol
  7542. ;.nocol
  7543. ; add.w d3,d2
  7544.  
  7545.  move.w d3,d4
  7546.  move.w d3,d5
  7547.  subq #1,d5
  7548.  move.w d6,d1
  7549.  addq #1,d1
  7550.  
  7551. .pixlopleft:
  7552.  move.w d0,(a3)+
  7553.  sub.w d2,d4
  7554.  bge.s .nobigstepl
  7555.  sub.w d1,d0
  7556.  add.w d3,d4
  7557.  dbra d5,.pixlopleft
  7558.  bra lineflat
  7559.  
  7560. .nobigstepl
  7561.  sub.w d6,d0
  7562.  dbra d5,.pixlopleft
  7563.  
  7564. lineflat:
  7565.  
  7566. bothbehind:
  7567.  dbra d7,sideloop
  7568.  bra pastsides
  7569.  
  7570. fbr: dc.w 0
  7571. sbr: dc.w 0
  7572. FloorPtBrights: dc.l 0
  7573.  
  7574. goursides:
  7575.  
  7576.  move.w #300,top
  7577.  move.w #-1,bottom
  7578.  move.w #0,drawit
  7579.  move.l #Rotated,a1
  7580.  move.l #OnScreen,a2
  7581.  move.w (a0)+,d7    ; no of sides
  7582. sideloopGOUR:
  7583.  move.w minz,d6
  7584.  move.w (a0)+,d1
  7585.  move.w (a0),d3
  7586.  
  7587.  move.w d1,d4
  7588.  move.w d3,d5
  7589.  and.w #$0fff,d1
  7590.  and.w #$0fff,d3
  7591.  
  7592.  rol.w #4,d4
  7593.  rol.w #4,d5
  7594.  and.w #$f,d4
  7595.  and.w #$f,d5
  7596.  
  7597.  move.l FloorPtBrights,a4
  7598.  move.w (a4,d4.w*8),d4
  7599.  bge.s .okpos1
  7600.  neg.w d4
  7601. .okpos1:
  7602.  sub.w #300,d4
  7603.  move.w d4,fbr
  7604.  move.w (a4,d5.w*8),d4
  7605.  bge.s .okpos2
  7606.  neg.w d4
  7607. .okpos2:
  7608.  sub.w #300,d4
  7609.  move.w d4,sbr
  7610.  
  7611.  move.w 6(a1,d1*8),d4    ;first z
  7612.  cmp.w d6,d4
  7613.  bgt firstinfrontGOUR
  7614.  move.w 6(a1,d3*8),d5    ; sec z
  7615.  cmp.w d6,d5
  7616.  ble bothbehindGOUR
  7617. ** line must be on left and partially behind.
  7618.  sub.w d5,d4
  7619.  
  7620.  move.w fbr,d0
  7621.  sub.w sbr,d0
  7622.  sub.w d5,d6
  7623.  muls d6,d0
  7624.  divs d4,d0
  7625.  add.w sbr,d0
  7626.  move.w d0,fbr
  7627.  
  7628.  move.l (a1,d1*8),d0
  7629.  sub.l (a1,d3*8),d0
  7630.  asr.l #7,d0
  7631.  muls d6,d0    ; new x coord
  7632.  divs d4,d0
  7633.  ext.l d0
  7634.  asl.l #7,d0
  7635.  
  7636.  add.l (a1,d3*8),d0
  7637.  move.w minz,d4
  7638.  move.w (a2,d3*2),d2
  7639.  divs d4,d0
  7640.  add.w MIDDLEX,d0
  7641.  move.l ypos,d3
  7642.  divs d5,d3
  7643.  
  7644.  move.w bottomline,d1 
  7645.  bra lineclippedGOUR
  7646.  
  7647. firstinfrontGOUR:
  7648.  move.w 6(a1,d3*8),d5    ; sec z
  7649.  cmp.w d6,d5
  7650.  bgt bothinfrontGOUR
  7651. ** line must be on right and partially behind.
  7652.  sub.w d4,d5    ; dz
  7653.  
  7654.  move.w sbr,d2
  7655.  sub.w fbr,d2
  7656.  sub.w d4,d6
  7657.  muls d6,d2
  7658.  divs d5,d2
  7659.  add.w fbr,d2
  7660.  move.w d2,sbr
  7661.  
  7662.  move.l (a1,d3*8),d2
  7663.  sub.l (a1,d1*8),d2    ; dx
  7664.  asr.l #7,d2
  7665.  muls d6,d2    ; new x coord
  7666.  divs d5,d2
  7667.  ext.l d2
  7668.  asl.l #7,d2
  7669.  add.l (a1,d1*8),d2
  7670.  move.w minz,d5
  7671.  move.w (a2,d1*2),d0
  7672.  divs d5,d2
  7673.  add.w MIDDLEX,d2
  7674.  move.l ypos,d1
  7675.  divs d4,d1
  7676.  move.w bottomline,d3 
  7677.  bra lineclippedGOUR
  7678.  
  7679. bothinfrontGOUR:
  7680.  
  7681. * Also, usefully enough, both are on-screen
  7682. * so no bottom clipping is needed.
  7683.  
  7684.  move.w (a2,d1*2),d0    ; first x
  7685.  move.w (a2,d3*2),d2    ; second x
  7686.  move.l ypos,d1
  7687.  move.l d1,d3
  7688.  divs d4,d1        ; first y
  7689.  divs d5,d3        ; second y
  7690. lineclippedGOUR:
  7691.  move.l #rightsidetab,a3
  7692.  cmp.w d1,d3
  7693.  bne linenotflatGOUR
  7694.  
  7695. ; move.w fbr,d4
  7696. ; move.w sbr,d5
  7697. ; cmp.w d0,d2
  7698. ; bgt.s .nsw
  7699. ; exg d4,d5
  7700. ;.nsw:
  7701.  
  7702. ; move.l #leftbrighttab,a3
  7703. ; move.w d4,(a3,d3.w)
  7704. ; move.l #rightbrighttab,a3
  7705. ; move.w d5,(a3,d3.w) 
  7706.  bra lineflatGOUR
  7707.  
  7708. linenotflatGOUR
  7709.  st drawit
  7710.  bgt lineonrightGOUR
  7711.  move.l #leftsidetab,a3
  7712.  exg d1,d3
  7713.  exg d0,d2
  7714.  
  7715.  lea (a3,d1*2),a3
  7716.  lea leftbrighttab-leftsidetab(a3),a4
  7717.  
  7718.  cmp.w top(pc),d1
  7719.  bge.s .nonewtop
  7720.  move.w d1,top
  7721. .nonewtop:
  7722.  cmp.w bottom(pc),d3
  7723.  ble.s .nonewbot
  7724.  move.w d3,bottom
  7725. .nonewbot:
  7726.  
  7727.  sub.w d1,d3    ; dy
  7728.  sub.w d0,d2    ; dx
  7729.  
  7730.  blt .linegoingleft
  7731.  
  7732.  ext.l d2
  7733.  divs d3,d2
  7734.  move.w d2,d6
  7735.  swap d2
  7736.  move.w d2,a5
  7737.  
  7738. ; moveq #0,d6
  7739. ; sub.w d3,d2
  7740. ; blt.s .noco
  7741. ;.makeco
  7742. ; addq #1,d6
  7743. ; sub.w d3,d2
  7744. ; bge.s .makeco
  7745. ;.noco
  7746. ; add.w d3,d2
  7747.  
  7748.  move.w d3,d4
  7749.  move.w d3,d5
  7750.  subq #1,d5
  7751.  move.w d6,d1
  7752.  addq #1,d1
  7753.  move.w d1,a6
  7754.  
  7755.  moveq #0,d1
  7756.  move.w sbr,d1
  7757.  move.w fbr,d2
  7758.  sub.w d1,d2
  7759.  ext.l d2
  7760.  asl.w #8,d2
  7761.  asl.w #2,d2
  7762.  divs d3,d2 
  7763.  ext.l d2
  7764.  asl.l #6,d2
  7765.  swap d1
  7766.  
  7767. .pixlopright:
  7768.  move.w d0,(a3)+
  7769.  swap d1
  7770.  move.w d1,(a4)+
  7771.  swap d1
  7772.  add.l d2,d1
  7773.  
  7774.  sub.w a5,d4
  7775.  bge.s .nobigstep
  7776.  add.w a6,d0
  7777.  add.w d3,d4
  7778.  dbra d5,.pixlopright
  7779.  bra lineflatGOUR
  7780. .nobigstep
  7781.  
  7782.  add.w d6,d0
  7783.  dbra d5,.pixlopright
  7784.  bra lineflatGOUR
  7785.  
  7786. .linegoingleft:
  7787.  
  7788.  neg.w d2
  7789.  
  7790.  ext.l d2
  7791.  divs d3,d2
  7792.  move.w d2,d6
  7793.  swap d2
  7794.  
  7795.  
  7796. ; moveq #0,d6
  7797. ; sub.w d3,d2
  7798. ; blt.s .nocol
  7799. ;.makecol
  7800. ; addq #1,d6
  7801. ; sub.w d3,d2
  7802. ; bge.s .makecol
  7803. ;.nocol
  7804. ; add.w d3,d2
  7805.  
  7806.  move.w d3,d4
  7807.  move.w d3,d5
  7808.  subq #1,d5
  7809.  
  7810.  move.w d6,d1
  7811.  addq #1,d1
  7812.  move.w d1,a6
  7813.  move.w d2,a5
  7814.  
  7815.  moveq #0,d1
  7816.  move.w sbr,d1
  7817.  move.w fbr,d2
  7818.  sub.w d1,d2
  7819.  ext.l d2
  7820.  asl.w #8,d2
  7821.  asl.w #2,d2
  7822.  divs d3,d2 
  7823.  ext.l d2
  7824.  asl.l #6,d2
  7825.  swap d1
  7826.  
  7827. .pixlopleft:
  7828.  
  7829.  swap d1
  7830.  move.w d1,(a4)+
  7831.  swap d1
  7832.  add.l d2,d1
  7833.  
  7834.  sub.w a5,d4
  7835.  bge.s .nobigstepl
  7836.  sub.w a6,d0
  7837.  add.w d3,d4
  7838.  move.w d0,(a3)+
  7839.  dbra d5,.pixlopleft
  7840.  bra lineflatGOUR
  7841.  
  7842. .nobigstepl
  7843.  sub.w d6,d0
  7844.  move.w d0,(a3)+
  7845.  dbra d5,.pixlopleft
  7846.  bra lineflatGOUR
  7847.  
  7848. lineonrightGOUR:
  7849.  
  7850.  lea (a3,d1*2),a3
  7851.  
  7852.  lea rightbrighttab-rightsidetab(a3),a4
  7853.  
  7854.  cmp.w top(pc),d1
  7855.  bge.s .nonewtop
  7856.  move.w d1,top
  7857. .nonewtop:
  7858.  cmp.w bottom(pc),d3
  7859.  ble.s .nonewbot
  7860.  move.w d3,bottom
  7861. .nonewbot:
  7862.  
  7863.  sub.w d1,d3    ; dy
  7864.  sub.w d0,d2    ; dx
  7865.  blt .linegoingleft
  7866. ; addq #1,d0
  7867.  ext.l d2
  7868.  divs d3,d2
  7869.  move.w d2,d6
  7870.  swap d2
  7871.  
  7872. ; moveq #0,d6
  7873. ; sub.w d3,d2
  7874. ; blt.s .noco
  7875. ;.makeco
  7876. ; addq #1,d6
  7877. ; sub.w d3,d2
  7878. ; bge.s .makeco
  7879. ;.noco
  7880. ; add.w d3,d2
  7881.  
  7882.  move.w d3,d4
  7883.  move.w d3,d5
  7884.  subq #1,d5
  7885.  move.w d6,d1
  7886.  addq #1,d1
  7887.  
  7888.  move.w d1,a6
  7889.  move.w d2,a5
  7890.  
  7891.  moveq #0,d1
  7892.  move.w fbr,d1
  7893.  move.w sbr,d2
  7894.  sub.w d1,d2
  7895.  ext.l d2
  7896.  asl.w #8,d2
  7897.  asl.w #2,d2
  7898.  divs d3,d2 
  7899.  ext.l d2
  7900.  asl.l #6,d2
  7901.  swap d1
  7902.  
  7903. .pixlopright:
  7904.  
  7905.  swap d1
  7906.  move.w d1,(a4)+
  7907.  swap d1
  7908.  add.l d2,d1
  7909.  
  7910.  sub.w a5,d4
  7911.  bge.s .nobigstep
  7912.  add.w a6,d0
  7913.  add.w d3,d4
  7914.  move.w d0,(a3)+
  7915.  dbra d5,.pixlopright
  7916.  bra lineflatGOUR
  7917.  
  7918. .nobigstep
  7919.  add.w d6,d0
  7920.  move.w d0,(a3)+
  7921.  dbra d5,.pixlopright
  7922.  bra lineflatGOUR
  7923.  
  7924. .linegoingleft:
  7925. ; addq #1,d0
  7926.  neg.w d2
  7927.  
  7928.  ext.l d2
  7929.  divs d3,d2
  7930.  move.w d2,d6
  7931.  swap d2
  7932.  
  7933.  
  7934. ; moveq #0,d6
  7935. ; sub.w d3,d2
  7936. ; blt.s .nocol
  7937. ;.makecol
  7938. ; addq #1,d6
  7939. ; sub.w d3,d2
  7940. ; bge.s .makecol
  7941. ;.nocol
  7942. ; add.w d3,d2
  7943.  
  7944.  move.w d3,d4
  7945.  move.w d3,d5
  7946.  subq #1,d5
  7947.  move.w d6,d1
  7948.  addq #1,d1
  7949.  move.w d1,a6
  7950.  move.w d2,a5
  7951.  
  7952.  moveq #0,d1
  7953.  move.w fbr,d1
  7954.  move.w sbr,d2
  7955.  sub.w d1,d2
  7956.  ext.l d2
  7957.  asl.w #8,d2
  7958.  asl.w #2,d2
  7959.  divs d3,d2 
  7960.  ext.l d2
  7961.  asl.l #6,d2
  7962.  swap d1
  7963.  
  7964. .pixlopleft:
  7965.  
  7966.  swap d1
  7967.  move.w d1,(a4)+
  7968.  swap d1
  7969.  add.l d2,d1
  7970.  
  7971.  move.w d0,(a3)+
  7972.  sub.w a5,d4
  7973.  bge.s .nobigstepl
  7974.  sub.w a6,d0
  7975.  add.w d3,d4
  7976.  dbra d5,.pixlopleft
  7977.  bra lineflatGOUR
  7978.  
  7979. .nobigstepl
  7980.  sub.w d6,d0
  7981.  dbra d5,.pixlopleft
  7982.  
  7983. lineflatGOUR:
  7984.  
  7985. bothbehindGOUR:
  7986.  dbra d7,sideloopGOUR
  7987.  
  7988. pastsides:
  7989.  
  7990.  addq #2,a0
  7991.  
  7992.  move.w #320,linedir
  7993.  
  7994. ; move.l FASTBUFFER2,a6
  7995. ; add.l BIGMIDDLEY,a6
  7996. ; move.l a6,REFPTR
  7997.  
  7998.  move.l FASTBUFFER,a6
  7999.  add.l BIGMIDDLEY,a6
  8000.  move.w (a0)+,d6
  8001.  add.w SMALLIT,d6
  8002.  move.w d6,scaleval
  8003.  move.w (a0)+,d6
  8004.  
  8005.  ifne CHEESEY
  8006.  move.w d6,d7    ; 000000XX000000YY
  8007.  lsr.w #6,d6
  8008.  add.w d6,d7    ; 000000XX0000XXYY
  8009.  
  8010.  and.b #%111,d6    ; 000000XX00000XYY
  8011.  add.b d7,d7    ; 000000XX0000XYY0
  8012.  asl.w #4,d7    ; 00XX0000 XYY00000
  8013.  and.w #%0010000011100000,d7
  8014.  move.w d7,d6
  8015.  endc
  8016.  
  8017.  move.w d6,whichtile
  8018.  move.w (a0)+,d6
  8019.  add.w ZoneBright,d6
  8020.  move.w d6,lighttype
  8021.  move.w above(pc),d6
  8022.  beq groundfloor
  8023. * on ceiling:
  8024.  move.w #-320,linedir
  8025.  suba.w #320,a6
  8026. groundfloor:
  8027.  
  8028.  move.w xoff,d6
  8029.  move.w zoff,d7
  8030.  add.w xwobxoff,d7
  8031.  add.w xwobzoff,d6
  8032.  ext.l d6
  8033.  ext.l d7
  8034.  
  8035.  tst.b FULLSCR
  8036.  beq.s .shiftit
  8037.  
  8038.  asl.l #2,d6
  8039.  asl.l #2,d7
  8040.  divs #3,d6
  8041.  divs #3,d7
  8042.  swap d6
  8043.  swap d7
  8044.  clr.w d6
  8045.  clr.w d7
  8046.  asr.l #2,d6
  8047.  asr.l #2,d7
  8048.  bra.s .donsht
  8049.  
  8050. .shiftit
  8051.  
  8052. ; divs #3,d6
  8053. ; divs #3,d7
  8054.  swap d6
  8055.  swap d7
  8056.  clr.w d6
  8057.  clr.w d7
  8058.  asr.l #1,d6
  8059.  asr.l #1,d7
  8060. .donsht:
  8061.  move.w scaleval(pc),d3
  8062.  beq.s .samescale
  8063.  bgt.s .scaledown
  8064.  neg.w d3
  8065.  asr.l d3,d7
  8066.  asr.l d3,d6
  8067.  bra.s .samescale
  8068. .scaledown:
  8069.  asl.l d3,d6
  8070.  asl.l d3,d7
  8071. .samescale
  8072.  
  8073.  ifne CHEESEY
  8074.  asr.l #1,d6
  8075.  asr.l #1,d7
  8076.  endc
  8077.  
  8078.  move.l d6,sxoff
  8079.  move.l d7,szoff
  8080.  bra pastscale 
  8081.  
  8082.  asr.l #3,d1
  8083.  asr.l #3,d2
  8084.  asr.l #2,d1
  8085.  asr.l #2,d2
  8086.  asr.l #1,d1
  8087.  asr.l #1,d2
  8088. scaleprogfrom
  8089.  nop
  8090.  nop
  8091.  asl.l #1,d1
  8092.  asl.l #1,d2
  8093.  asl.l #2,d1
  8094.  asl.l #2,d2
  8095.  asl.l #3,d1
  8096.  asl.l #3,d2
  8097.  
  8098. top: dc.w 0
  8099. bottom: dc.w 0
  8100. ypos: dc.l 0
  8101. nfloors: dc.w 0
  8102. lighttype: dc.w 0
  8103. above: dc.w 0 
  8104. linedir: dc.w 0
  8105. distaddr: dc.w 0
  8106.  
  8107. minz: dc.l 0
  8108.  
  8109. leftsidetab:
  8110.  ds.w 512*2
  8111. rightsidetab:
  8112.  ds.w 512*2
  8113. leftbrighttab:
  8114.  ds.w 512*2
  8115. rightbrighttab:
  8116.  ds.w 512*2
  8117.  
  8118. PointBrights:
  8119.  dc.l 0
  8120. CurrentPointBrights:
  8121.  ds.l 2*256*10
  8122.  
  8123. movespd: dc.w 0
  8124. largespd: dc.l 0
  8125. disttobot: dc.w 0
  8126.  
  8127. pastscale:
  8128.  
  8129.  
  8130.  tst.b drawit(pc)
  8131.  beq dontdrawfloor
  8132.  
  8133.  tst.b DOUBLEHEIGHT
  8134.  beq pix1h
  8135.  
  8136.  move.l a0,-(a7)
  8137.  move.w linedir,d1
  8138.  add.w d1,linedir
  8139.  
  8140.  move.l #leftsidetab,a4
  8141.  move.w top(pc),d1
  8142.  tst.w above
  8143.  beq.s .clipfloor
  8144.  
  8145.  sub.w #320,a6
  8146.  
  8147.  move.w MIDDLEY,d7
  8148.  subq #1,d7
  8149.  sub.w d1,d7
  8150.  move.w d7,disttobot
  8151.  
  8152.  move.w bottom(pc),d7
  8153.  move.w MIDDLEY,d3
  8154.  move.w d3,d4
  8155.  sub.w topclip,d3
  8156.  sub.w botclip,d4
  8157.  cmp.w d3,d1
  8158.  bge predontdrawfloor
  8159.  cmp.w d4,d7
  8160.  blt predontdrawfloor
  8161.  cmp.w d4,d1
  8162.  bge.s .nocliptoproof
  8163.  move.w d4,d1
  8164. .nocliptoproof
  8165.  cmp.w d3,d7
  8166.  blt .doneclip
  8167.  move.w d3,d7
  8168.  bra .doneclip
  8169.  
  8170. .clipfloor:
  8171.  move.w BOTTOMY,d7
  8172.  sub.w MIDDLEY,d7
  8173.  subq #1,d7
  8174.  sub.w d1,d7
  8175.  move.w d7,disttobot
  8176.  
  8177.  move.w bottom(pc),d7
  8178.  move.w botclip,d4
  8179.  sub.w MIDDLEY,d4
  8180.  cmp.w d4,d1
  8181.  bge predontdrawfloor
  8182.  move.w topclip,d3
  8183.  sub.w MIDDLEY,d3
  8184.  cmp.w d3,d1
  8185.  bge.s .nocliptopfloor
  8186.  move.w d3,d1
  8187. .nocliptopfloor 
  8188.  cmp.w d3,d7
  8189.  ble predontdrawfloor
  8190.  cmp.w d4,d7
  8191.  blt.s .noclipbotfloor
  8192.  move.w d4,d7
  8193. .noclipbotfloor:
  8194.  
  8195. .doneclip:
  8196.  
  8197.  lea (a4,d1*2),a4
  8198.  addq #1,d7
  8199.  sub.w d1,d7
  8200.  
  8201. ;moveq #0,d0
  8202.  asr.w #1,d1
  8203. ; addx d0,d1
  8204.  
  8205. ; move.l #dists,a2
  8206.  move.w distaddr,d0
  8207.  muls #64,d0
  8208.  move.l d0,a2
  8209. ; muls #25,d0
  8210. ; adda.w d0,a2
  8211. ; lea (a2,d1*2),a2
  8212.  asr.w #1,d7
  8213.  ble predontdrawfloor 
  8214.  move.w d1,d0
  8215.  bne.s .notzero
  8216.  moveq #1,d0
  8217. .notzero
  8218.  add.w d0,d0
  8219.  muls linedir,d1
  8220.  add.l d1,a6
  8221. ; sub.l d1,REFPTR
  8222.  move.l TexturePal,a1
  8223.  move.l LineToUse,a5
  8224.  
  8225.  move.w #4,tonextline
  8226.  
  8227.  bra pix2h
  8228.  
  8229. pix1h:
  8230.  
  8231.  move.l a0,-(a7)
  8232.  
  8233.  move.l #leftsidetab,a4
  8234.  move.w top(pc),d1
  8235.   
  8236.  tst.w above
  8237.  beq.s clipfloor
  8238.  
  8239.  move.w MIDDLEY,d7
  8240.  subq #1,d7
  8241.  sub.w d1,d7
  8242.  move.w d7,disttobot
  8243.  
  8244.  move.w bottom(pc),d7
  8245.  move.w MIDDLEY,d3
  8246.  move.w d3,d4
  8247.  sub.w topclip,d3
  8248.  sub.w botclip,d4
  8249.  cmp.w d3,d1
  8250.  bge predontdrawfloor
  8251.  cmp.w d4,d7
  8252.  blt predontdrawfloor
  8253.  cmp.w d4,d1
  8254.  bge.s .nocliptoproof
  8255.  move.w d4,d1
  8256. .nocliptoproof
  8257.  cmp.w d3,d7
  8258.  blt doneclip
  8259.  move.w d3,d7
  8260.  bra doneclip
  8261.  
  8262. clipfloor:
  8263.  move.w BOTTOMY,d7
  8264.  sub.w MIDDLEY,d7
  8265.  subq #1,d7
  8266.  sub.w d1,d7
  8267.  move.w d7,disttobot
  8268.  
  8269.  move.w bottom(pc),d7
  8270.  move.w botclip,d4
  8271.  sub.w MIDDLEY,d4
  8272.  cmp.w d4,d1
  8273.  bge predontdrawfloor
  8274.  move.w topclip,d3
  8275.  sub.w MIDDLEY,d3
  8276.  cmp.w d3,d1
  8277.  bge.s .nocliptopfloor
  8278.  move.w d3,d1
  8279. .nocliptopfloor 
  8280.  cmp.w d3,d7
  8281.  ble predontdrawfloor
  8282.  cmp.w d4,d7
  8283.  blt.s .noclipbotfloor
  8284.  move.w d4,d7
  8285. .noclipbotfloor:
  8286.  
  8287. doneclip:
  8288.  
  8289.  lea (a4,d1*2),a4
  8290. ; move.l #dists,a2
  8291.  move.w distaddr,d0
  8292.  muls #64,d0
  8293.  move.l d0,a2
  8294. ; muls #25,d0
  8295. ; adda.w d0,a2
  8296. ; lea (a2,d1*2),a2
  8297.  sub.w d1,d7
  8298.  ble predontdrawfloor 
  8299.  move.w d1,d0
  8300.  bne.s .notzero
  8301.  moveq #1,d0
  8302. .notzero
  8303.  muls linedir,d1
  8304.  add.l d1,a6
  8305. ; sub.l d1,REFPTR
  8306.  move.l TexturePal,a1
  8307.  move.l LineToUse,a5
  8308.  
  8309.  move.w #2,tonextline
  8310.  
  8311. pix2h:
  8312.  
  8313.  tst.b gourfloor
  8314.  bne dogourfloor
  8315.  
  8316.  tst.b anyclipping
  8317.  beq dofloornoclip
  8318.  
  8319. dofloor:
  8320. ; move.w (a2)+,d0
  8321.  move.w leftclip,d3
  8322.  move.w rightclip,d4
  8323.  move.w rightsidetab-leftsidetab(a4),d2
  8324.  
  8325.  addq #1,d2
  8326.  cmp.w d3,d2
  8327.  ble.s nodrawline
  8328.  cmp.w d4,d2
  8329.  ble.s noclipright
  8330.  move.w d4,d2
  8331. noclipright:
  8332.  move.w (a4),d1
  8333.  cmp.w d4,d1
  8334.  bge.s nodrawline
  8335.  cmp.w d3,d1
  8336.  bge.s noclipleft
  8337.  move.w d3,d1
  8338. noclipleft:
  8339.  cmp.w d1,d2
  8340.  ble.s nodrawline
  8341.  
  8342.  move.w d1,leftedge
  8343.  move.w d2,rightedge
  8344.  
  8345. ; moveq #0,d1
  8346. ; moveq #0,d3
  8347. ; move.w leftbrighttab-leftsidetab(a4),d1
  8348. ; bge.s .okbl
  8349. ; moveq #0,d1
  8350. ;.okbl:
  8351.  
  8352. ; move.w rightbrighttab-leftsidetab(a4),d3
  8353. ; bge.s .okbr
  8354. ; moveq #0,d3
  8355. ;.okbr:
  8356.  
  8357. ; sub.w d1,d3
  8358. ; asl.w #8,d1
  8359. ; move.l d1,leftbright
  8360. ; swap d3
  8361. ; asr.l #5,d3
  8362. ; divs d5,d3
  8363. ; move.w d3,d5
  8364. ; muls.w d6,d5
  8365. ; asr.l #3,d5
  8366. ; clr.b d5
  8367. ; add.w d5,leftbright+2
  8368.  
  8369. ; ext.l d3
  8370. ; asl.l #5,d3
  8371. ; swap d3
  8372. ; asl.w #8,d3
  8373. ; move.l d3,brightspd
  8374.  
  8375.  move.l a6,a3
  8376.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8377.  move.l a2,d7
  8378.  asl.l #2,d7
  8379.  ext.l d0
  8380.  divs.l d0,d7
  8381.  move.l d7,d0
  8382.  jsr (a5)
  8383.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8384. nodrawline
  8385.  sub.w #1,disttobot
  8386.  move.w linedir(pc),d3
  8387.  adda.w d3,a6
  8388. ; ext.l d3
  8389. ; sub.l d3,REFPTR
  8390.  move.w tonextline,d3
  8391.  add.w d3,a4
  8392.  asr.w #1,d3
  8393.  add.w d3,d0
  8394.  subq #1,d7
  8395.  bgt dofloor
  8396.  
  8397. predontdrawfloor
  8398.  move.l (a7)+,a0
  8399.  
  8400. dontdrawfloor:
  8401.  
  8402.  rts
  8403.  
  8404. tonextline: dc.w 0
  8405. anyclipping: dc.w 0
  8406.  
  8407. dofloornoclip:
  8408. ; move.w (a2)+,d0
  8409.  move.w rightsidetab-leftsidetab(a4),d2
  8410.  addq #1,d2
  8411.  move.w (a4),d1
  8412.  move.w d1,leftedge
  8413.  move.w d2,rightedge
  8414.  
  8415. ; sub.w d1,d2
  8416.  
  8417. ; moveq #0,d1
  8418. ; moveq #0,d3
  8419. ; move.w leftbrighttab-leftsidetab(a4),d1
  8420. ; bge.s .okbl
  8421. ; moveq #0,d1
  8422. ;.okbl:
  8423.  
  8424. ; move.w rightbrighttab-leftsidetab(a4),d3
  8425. ; bge.s .okbr
  8426. ; moveq #0,d3
  8427. ;.okbr:
  8428.  
  8429. ; sub.w d1,d3
  8430. ; asl.w #8,d1
  8431. ; move.l d1,leftbright
  8432. ; swap d3
  8433. ; asr.l #5,d3
  8434. ; divs d2,d3
  8435. ; ext.l d3
  8436. ; asl.l #5,d3
  8437. ; swap d3
  8438. ; asl.w #8,d3
  8439. ; move.l d3,brightspd
  8440.  
  8441.  move.l a6,a3
  8442.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8443.  move.l a2,d7
  8444.  asl.l #2,d7
  8445.  ext.l d0
  8446.  divs.l d0,d7
  8447.  move.l d7,d0
  8448.  jsr (a5)
  8449.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8450.  sub.w #1,disttobot
  8451.  move.w linedir(pc),d3
  8452.  adda.w d3,a6
  8453. ; ext.l d3
  8454. ; sub.l d3,REFPTR
  8455.  move.w tonextline,d3
  8456.  add.w d3,a4
  8457.  asr.w #1,d3
  8458.  add.w d3,d0
  8459.  subq #1,d7
  8460.  bgt dofloornoclip
  8461.  
  8462.  bra predontdrawfloor
  8463.  
  8464. dogourfloor:
  8465.  tst.b anyclipping
  8466.  beq dofloornoclipGOUR
  8467.  
  8468. dofloorGOUR:
  8469. ; move.w (a2)+,d0
  8470.  move.w leftclip,d3
  8471.  move.w rightclip,d4
  8472.  move.w rightsidetab-leftsidetab(a4),d2
  8473.  
  8474.  move.w d2,d5
  8475.  sub.w (a4),d5
  8476.  addq #1,d5
  8477.  moveq #0,d6
  8478.  
  8479.  addq #1,d2
  8480.  cmp.w d3,d2
  8481.  ble nodrawlineGOUR
  8482.  cmp.w d4,d2
  8483.  ble.s nocliprightGOUR
  8484.  move.w d4,d2
  8485. nocliprightGOUR:
  8486.  move.w (a4),d1
  8487.  cmp.w d4,d1
  8488.  bge nodrawlineGOUR
  8489.  cmp.w d3,d1
  8490.  bge.s noclipleftGOUR
  8491.  move.w d3,d6
  8492.  subq #1,d6
  8493.  sub.w d1,d6
  8494.  move.w d3,d1
  8495. noclipleftGOUR:
  8496.  cmp.w d1,d2
  8497.  ble nodrawlineGOUR
  8498.  
  8499.  move.w d1,leftedge
  8500.  move.w d2,rightedge
  8501.  
  8502.  move.l a2,d2
  8503.  asl.l #2,d2
  8504.  ext.l d0
  8505.  divs.l d0,d2
  8506.  move.l d2,dst
  8507.  asr.l #7,d2
  8508.  asr.l #2,d2
  8509. ; addq #5,d2
  8510. ; add.w lighttype,d2
  8511.  
  8512.  moveq #0,d1
  8513.  moveq #0,d3
  8514.  move.w leftbrighttab-leftsidetab(a4),d1
  8515.  add.w d2,d1
  8516.  bge.s .okbl
  8517.  moveq #0,d1
  8518. .okbl:
  8519. ; asr.w #1,d1
  8520.  cmp.w #30,d1
  8521.  ble.s .okdl
  8522.  move.w #30,d1
  8523. .okdl:
  8524.  
  8525.  move.w rightbrighttab-leftsidetab(a4),d3
  8526.  add.w d2,d3
  8527.  bge.s .okbr
  8528.  moveq #0,d3
  8529. .okbr:
  8530. ; asr.w #1,d3
  8531.  cmp.w #30,d3
  8532.  ble.s .okdr
  8533.  move.w #30,d3
  8534. .okdr:
  8535.  
  8536.  sub.w d1,d3
  8537.  asl.w #8,d1
  8538.  move.w d1,leftbright
  8539.  swap d3
  8540.  tst.l d3
  8541.  bgt.s .OKITSPOSALREADY 
  8542.  neg.l d3
  8543.  asr.l #6,d3
  8544.  divs d5,d3
  8545.  neg.w d3
  8546.  bra.s .OKNOWITSNEG
  8547.  
  8548. .OKITSPOSALREADY
  8549.  asr.l #6,d3
  8550.  divs d5,d3
  8551. .OKNOWITSNEG
  8552.  muls d3,d6
  8553.  add.w #256*4,d6
  8554.  asr.w #2,d6
  8555.  clr.b d6
  8556.  add.w leftbright,d6
  8557.  bge.s .oklbnn
  8558.  moveq #0,d6
  8559. .oklbnn:
  8560.  move.w d6,leftbright
  8561.  
  8562.  ext.l d3
  8563.  asr.l #2,d3
  8564. ; swap d3
  8565. ; asl.w #8,d3
  8566.  move.w d3,brightspd
  8567.  
  8568.  move.l a6,a3
  8569.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8570.  move.l dst,d0
  8571.  move.l TexturePal,a1
  8572.  move.l floortile,a0
  8573.  adda.w whichtile,a0
  8574.  jsr pastfloorbright
  8575.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8576. nodrawlineGOUR
  8577.  
  8578.  sub.w #1,disttobot
  8579.  
  8580.  move.w linedir(pc),d3
  8581.  adda.w d3,a6
  8582. ; ext.l d3
  8583. ; sub.l d3,REFPTR
  8584.  move.w tonextline,d3
  8585.  add.w d3,a4
  8586.  asr.w #1,d3
  8587.  add.w d3,d0
  8588.  subq #1,d7
  8589.  bgt dofloorGOUR
  8590.  
  8591. predontdrawfloorGOUR
  8592.  move.l (a7)+,a0
  8593.  
  8594. dontdrawfloorGOUR:
  8595.  
  8596.  rts
  8597.  
  8598. REFPTR: dc.l 0
  8599.  
  8600. dofloornoclipGOUR:
  8601. ; move.w (a2)+,d0
  8602.  move.w rightsidetab-leftsidetab(a4),d2
  8603.  addq #1,d2
  8604.  move.w (a4),d1
  8605.  move.w d1,leftedge
  8606.  move.w d2,rightedge
  8607.  
  8608.  sub.w d1,d2
  8609.  
  8610.  move.l a2,d6
  8611.  asl.l #2,d6
  8612.  ext.l d0
  8613.  divs.l d0,d6
  8614.  move.l d6,d5
  8615.  asr.l #7,d5
  8616.  asr.l #2,d5
  8617. ; addq #5,d5
  8618. ; add.w lighttype,d5
  8619.  
  8620.  moveq #0,d1
  8621.  moveq #0,d3
  8622.  move.w leftbrighttab-leftsidetab(a4),d1
  8623.  add.w d5,d1
  8624.  bge.s .okbl
  8625.  moveq #0,d1
  8626. .okbl:
  8627. ; asr.w #1,d1
  8628.  cmp.w #30,d1
  8629.  ble.s .okdl
  8630.  move.w #30,d1
  8631. .okdl:
  8632.  
  8633.  move.w rightbrighttab-leftsidetab(a4),d3
  8634.  add.w d5,d3
  8635.  bge.s .okbr
  8636.  moveq #0,d3
  8637. .okbr:
  8638. ; asr.w #1,d3
  8639.  cmp.w #30,d3
  8640.  ble.s .okdr
  8641.  move.w #30,d3
  8642. .okdr:
  8643.  
  8644. ; sub.w d1,d3
  8645. ; asl.w #8,d1
  8646. ; move.l d1,leftbright
  8647. ; swap d3
  8648. ; asr.l #5,d3
  8649. ; divs d2,d3
  8650. ; ext.l d3
  8651. ; asl.l #5,d3
  8652. ; swap d3
  8653. ; asl.w #8,d3
  8654. ; move.l d3,brightspd
  8655.  
  8656.  sub.w d1,d3
  8657.  asl.w #8,d1
  8658.  move.w d1,leftbright
  8659.  swap d3
  8660.  ext.l d2
  8661.  divs.l d2,d3
  8662.  asr.l #8,d3
  8663.  move.w d3,brightspd
  8664.  
  8665.  move.l a6,a3
  8666.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8667.  move.l d6,d0
  8668.  move.l d0,dst
  8669.  move.l TexturePal,a1
  8670.  move.l floortile,a0
  8671.  adda.w whichtile,a0
  8672.  jsr pastfloorbright
  8673.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8674.  sub.w #1,disttobot
  8675.  
  8676.  move.w linedir(pc),d3
  8677.  adda.w d3,a6
  8678. ; ext.l d3
  8679. ; sub.l d3,REFPTR
  8680.  
  8681.  move.w tonextline,d3
  8682.  add.w d3,a4
  8683.  asr.w #1,d3
  8684.  add.w d3,d0
  8685.  subq #1,d7
  8686.  bgt dofloornoclipGOUR
  8687.  
  8688.  bra predontdrawfloorGOUR
  8689.  
  8690.  
  8691.  
  8692. dists:
  8693. ; incbin "floordists"
  8694. drawit: dc.w 0
  8695.  
  8696. LineToUse: dc.l 0
  8697.  
  8698. ***************************
  8699. * Right then, time for the floor
  8700. * routine...
  8701. * For test purposes, give it
  8702. * a3 = point to screen
  8703. * d0= z distance away
  8704. * and sinval+cosval must be set up.
  8705. ***************************
  8706.  
  8707. BLACKFLOOR:
  8708.  moveq #0,d0
  8709.  bra.s DOBLACK
  8710.  
  8711. SimpleFloorLine:
  8712.  
  8713.  CACHE_OFF d2
  8714.  
  8715.  move.l #doacrossline,a1
  8716.  move.w leftedge(pc),d1
  8717.  move.w rightedge(pc),d3
  8718.  sub.w d1,d3
  8719.  lea (a1,d1.w*4),a1
  8720.  move.w (a1,d3.w*4),d4
  8721.  move.w #$4e75,(a1,d3.w*4)
  8722.  
  8723.  tst.b CLRNOFLOOR
  8724.  bne.s BLACKFLOOR
  8725.  
  8726.  move.l #PLAINSCALE,a2
  8727.  
  8728.  move.w d0,d2
  8729.  move.w lighttype,d1
  8730.  asr.w #8,d2
  8731.  add.w #5,d1
  8732.  add.w d2,d1
  8733.  bge.s .fixedbright
  8734.  moveq #0,d1
  8735. .fixedbright:
  8736.  cmp.w #28,d1
  8737.  ble.s .smallbright
  8738.  move.w #28,d1
  8739. .smallbright:
  8740.  lea (a2,d1.w*2),a2
  8741.  
  8742.  move.w whichtile,d0
  8743.  move.w d0,d1
  8744.  and.w #$3,d1
  8745.  and.w #$300,d0
  8746.  lsl.b #6,d1
  8747.  move.b d1,d0
  8748.  move.w d0,tstwhich
  8749.  move.w (a2,d0.w),d0
  8750.  
  8751. DOBLACK:
  8752.  jsr (a1)
  8753.  move.w d4,(a1,d3.w*4)
  8754.  
  8755.  CACHE_ON d2
  8756.  
  8757.  rts
  8758.  
  8759. tstwhich: dc.w 0
  8760. whichtile: dc.w 0
  8761.   
  8762. PLAINSCALE: 
  8763. ;incbin "ab3:includes/plainscale"
  8764.   
  8765. storeit: dc.l 0
  8766.  
  8767. doacrossline:
  8768. val SET 0
  8769.  REPT 32
  8770.  move.w d0,val(a3)
  8771. val SET val+4
  8772.  ENDR
  8773. val SET val+4
  8774.  REPT 32
  8775.  move.w d0,val(a3)
  8776. val SET val+4
  8777.  ENDR
  8778. val SET val+4
  8779.  REPT 32
  8780.  move.w d0,val(a3)
  8781. val SET val+4
  8782.  ENDR
  8783.  rts
  8784.  
  8785.  
  8786. leftedge: dc.w 0
  8787. rightedge: dc.w 0
  8788.  
  8789. rndpt: dc.l rndtab
  8790.  
  8791.  
  8792. dst: dc.l 0
  8793.  
  8794. FloorLine:
  8795.  
  8796.  move.l floortile,a0
  8797.  adda.w whichtile,a0
  8798.  move.w lighttype,d1
  8799.  move.l d0,dst    ; *4
  8800.  move.l d0,d2    ; *4
  8801. *********************
  8802. * Old version
  8803.  asr.l #2,d2
  8804.  asr.l #8,d2
  8805.  add.w #5,d1
  8806. *********************
  8807. ; asr.w #3,d2
  8808. ; sub.w #4,d2
  8809. ; cmp.w #6,d2
  8810. ; blt.s flbrbr
  8811. ; move.w #6,d2
  8812. ;flbrbr:
  8813. *********************
  8814.  add.w d2,d1
  8815.  bge.s .fixedbright
  8816.  moveq #0,d1
  8817. .fixedbright:
  8818.  cmp.w #28,d1
  8819.  ble.s .smallbright
  8820.  move.w #28,d1
  8821. .smallbright:
  8822.  move.l TexturePal,a1
  8823.  add.l floorbright(pc,d1.w*4),a1
  8824.  bra pastfloorbright
  8825.  
  8826. ConstCol: dc.w 0
  8827.  
  8828. BumpLine:
  8829.  
  8830.  tst.b smoothbumps
  8831.  beq.s Chunky
  8832.  
  8833.  move.l #SmoothTile,a0
  8834.  lea Smoothscalecols,a1
  8835.  bra pastast
  8836.  
  8837. Chunky:
  8838.  
  8839.  moveq #0,d2
  8840.  move.l #Bumptile,a0
  8841.  move.w whichtile,d2
  8842.  adda.w d2,a0
  8843.  ror.l #2,d2
  8844.  lsr.w #6,d2
  8845.  rol.l #2,d2
  8846.  and.w #15,d2
  8847.  move.l #ConstCols,a1
  8848.  move.w (a1,d2.w*2),ConstCol
  8849.  lea Bumpscalecols,a1
  8850.  
  8851. pastast:
  8852.  move.w lighttype,d1
  8853.  
  8854.  move.l d0,dst
  8855.  
  8856.  move.l d0,d2
  8857. *********************
  8858. * Old version
  8859.  asr.l #2,d2
  8860.  asr.l #8,d2
  8861.  add.w #5,d1
  8862. *********************
  8863. ; asr.w #3,d2
  8864. ; sub.w #4,d2
  8865. ; cmp.w #6,d2
  8866. ; blt.s flbrbr
  8867. ; move.w #6,d2
  8868. ;flbrbr:
  8869. *********************
  8870.  add.w d2,d1
  8871.  bge.s .fixedbright
  8872.  moveq #0,d1
  8873. .fixedbright:
  8874.  cmp.w #31,d1
  8875.  ble.s .smallbright
  8876.  move.w #31,d1
  8877. .smallbright:
  8878.  add.l floorbright(pc,d1.w*4),a1
  8879.  bra pastfloorbright
  8880.  
  8881.  
  8882. floorbright:
  8883.  dc.l 512*0
  8884.  dc.l 512*1
  8885.  dc.l 512*2
  8886.  dc.l 512*3
  8887.  dc.l 512*4
  8888.  
  8889.  dc.l 512*5
  8890.  dc.l 512*6
  8891.  dc.l 512*7
  8892.  dc.l 512*8
  8893.  dc.l 512*9
  8894.  
  8895.  dc.l 512*10
  8896.  dc.l 512*11
  8897.  dc.l 512*12
  8898.  dc.l 512*13
  8899.  dc.l 512*14
  8900.  
  8901.  dc.l 512*15
  8902.  dc.l 512*16
  8903.  dc.l 512*17
  8904.  dc.l 512*18
  8905.  dc.l 512*19
  8906.  
  8907.  dc.l 512*20
  8908.  dc.l 512*21
  8909.  dc.l 512*22
  8910.  dc.l 512*23
  8911.  dc.l 512*24
  8912.  
  8913.  dc.l 512*25
  8914.  dc.l 512*26
  8915.  dc.l 512*27
  8916.  dc.l 512*28
  8917.  dc.l 512*29
  8918.  
  8919.  dc.l 512*30
  8920.  dc.l 512*31
  8921.  
  8922. widthleft: dc.w 0
  8923. scaleval: dc.w 0
  8924. sxoff: dc.l 0
  8925. szoff: dc.l 0
  8926. xoff34: dc.w 0
  8927. zoff34: dc.w 0
  8928. scosval: dc.w 0
  8929. ssinval: dc.w 0
  8930.  
  8931.  
  8932. floorsetbright:
  8933.  move.l #walltiles,a0
  8934.  
  8935. pastfloorbright:
  8936.  
  8937.  move.l d0,d1
  8938.  muls cosval,d1    ; change in x across whole width
  8939.  move.l d0,d2
  8940.  muls sinval,d2    ; change in z across whole width
  8941.  neg.l d2
  8942.  ifne CHEESEY
  8943.  asr.l #3,d2
  8944.  asr.l #3,d1
  8945.  endc
  8946.  ifeq CHEESEY
  8947.  asr.l #2,d2
  8948.  asr.l #2,d1
  8949.  endc
  8950. scaleprog:
  8951.  move.w scaleval(pc),d3
  8952.  beq.s .samescale
  8953.  bgt.s .scaledown
  8954.  neg.w d3
  8955.  asr.l d3,d1
  8956.  asr.l d3,d2
  8957.  bra.s .samescale
  8958. .scaledown:
  8959.  asl.l d3,d1
  8960.  asl.l d3,d2
  8961. .samescale
  8962.  
  8963.  
  8964.  move.l d1,d3 ;    z cos
  8965.  move.l d3,d6
  8966.  move.l d3,d5
  8967.  asr.l #1,d6
  8968.  add.l d6,d3
  8969.  asr.l #1,d3
  8970.  
  8971.  move.l d2,d4    ; z sin
  8972.  move.l d4,d6
  8973.  asr.l #1,d6
  8974.  add.l d4,d6
  8975.  add.l d3,d4
  8976.  neg.l d4    ; start x
  8977.  
  8978.  asr.l #1,d6    ; zsin/2
  8979.  sub.l d6,d5    ; start z
  8980.  
  8981.  add.l sxoff,d4
  8982.  add.l szoff,d5
  8983.  
  8984.  tst.b FULLSCR
  8985.  beq.s .nob
  8986.  
  8987.  moveq #0,d6
  8988.  move.w leftedge(pc),d6
  8989.  beq.s .nomultleftB
  8990.  
  8991.  add.l d6,d6
  8992.  divs #3,d6
  8993.  ext.l d6
  8994.  
  8995.  move.l d1,a4
  8996.  move.l d2,a5
  8997.  
  8998.  muls.l d6,d1
  8999.  asr.l #7,d1
  9000.  add.l d1,d4
  9001.  
  9002.  muls.l d6,d2
  9003.  asr.l #7,d2
  9004.  add.l d2,d5
  9005.  move.l a4,d1
  9006.  move.l a5,d2
  9007.  
  9008.  move.w leftedge(pc),d6
  9009.  
  9010. .nomultleftB:
  9011.  
  9012.  move.w d4,startsmoothx
  9013.  move.w d5,startsmoothz
  9014.  
  9015.  asr.l #8,d4
  9016.  asl.l #8,d5
  9017. ; add.w szoff,d5
  9018. ; add.w sxoff,d4
  9019. ; and.w #63,d4
  9020. ; and.w #63*256,d5
  9021.  
  9022.  move.w d4,d5
  9023.  
  9024.  asr.l #6,d1
  9025.  asr.l #6,d2
  9026.  divs.l #3,d1
  9027.  divs.l #3,d2
  9028.  
  9029.  bra.s doneallmult
  9030.  
  9031. .nob 
  9032.  
  9033.  moveq #0,d6
  9034.  move.w leftedge(pc),d6
  9035.  beq.s nomultleft
  9036.  
  9037.  move.l d1,a4
  9038.  move.l d2,a5
  9039.  
  9040.  muls.l d6,d1
  9041.  asr.l #7,d1
  9042.  add.l d1,d4
  9043.  
  9044.  muls.l d6,d2
  9045.  asr.l #7,d2
  9046.  add.l d2,d5
  9047.  move.l a4,d1
  9048.  move.l a5,d2
  9049.  
  9050.  move.w leftedge(pc),d6
  9051.  
  9052. nomultleft:
  9053.  
  9054.  move.w d4,startsmoothx
  9055.  move.w d5,startsmoothz
  9056.  
  9057.  asr.l #8,d4
  9058.  asl.l #8,d5
  9059.  
  9060.  
  9061. ; add.w szoff,d5
  9062. ; add.w sxoff,d4
  9063. ; and.w #63,d4
  9064. ; and.w #63*256,d5
  9065.  
  9066.  move.w d4,d5
  9067.  
  9068.  asr.l #7,d1
  9069.  asr.l #7,d2
  9070. ; divs.l #3,d1
  9071. ; divs.l #3,d2
  9072.  
  9073. doneallmult:
  9074.  
  9075.  move.w d1,a4
  9076.  move.w d2,a5
  9077.  asl.l #8,d2
  9078. ; and.w #%0011111100000000,d2
  9079.  asr.l #8,d1
  9080.  move.w d1,d2
  9081.  ifeq CHEESEY
  9082.  move.l #$3fff3fff,d1
  9083.  endc
  9084.  ifne CHEESEY
  9085.  move.l #$1fff1fff,d1
  9086.  endc
  9087.  and.l d1,d5
  9088. ; swap d5
  9089. ; move.w startsmoothz,d5
  9090. ; swap d5
  9091. ; swap d2
  9092. ; move.w a5,d2
  9093. ; swap d2
  9094.  
  9095. ***********************************
  9096.  
  9097.  
  9098.  tst.b DOUBLEWIDTH
  9099.  beq.s .nodoub
  9100.  
  9101.  and.b #$fe,d6
  9102.  
  9103.  move.w d6,a2
  9104.  moveq #0,d0 
  9105.  move.w rightedge(pc),d3 
  9106.  lea (a3,a2.w),a3 
  9107.  move.w d3,d7
  9108.  sub.w a2,d7
  9109.  asr.w #1,d7
  9110.  move.w startsmoothx,d3
  9111.  
  9112.  tst.b usewater
  9113.  bne texturedwaterDOUB
  9114. ; tst.b gourfloor
  9115.  bra gouraudfloorDOUB
  9116.  
  9117. .nodoub:
  9118.  
  9119.  move.w d6,a2
  9120.  moveq #0,d0 
  9121.  move.w rightedge(pc),d3 
  9122.  lea (a3,a2.w),a3 
  9123.  move.w d3,d7
  9124.  sub.w a2,d7
  9125.  
  9126. intofirststrip:
  9127. allintofirst:
  9128.  
  9129.  move.w startsmoothx,d3
  9130.  
  9131. tstwat:
  9132.  
  9133.  tst.b usewater
  9134.  bne texturedwater
  9135. ; tst.b gourfloor
  9136.  bra gouraudfloor
  9137.  
  9138.  
  9139.  
  9140. ******************************
  9141. * BumpMap the floor/ceiling! *
  9142.  tst.b usebumps
  9143.  bne.s BumpMap
  9144. ******************************
  9145.  
  9146. ordinary:
  9147.  moveq #0,d0
  9148.  
  9149.  dbra d7,acrossscrn
  9150.  rts
  9151.  
  9152. usebumps: dc.w $0
  9153. smoothbumps: dc.w $0
  9154. gourfloor: dc.w 0
  9155.  
  9156.  include "ab3:source_4000/bumpmap.s"
  9157.  
  9158.  CNOP 0,4
  9159. backbefore:
  9160.  and.w d1,d5
  9161.  move.b (a0,d5.w*4),d0
  9162.  add.w a4,d3
  9163.  addx.l d6,d5
  9164.  move.w (a1,d0.w*2),(a3)
  9165.  addq #4,a3
  9166.  dbcs d7,acrossscrn
  9167.  dbcc d7,backbefore
  9168.  bra.s past1
  9169.  
  9170. acrossscrn:
  9171.  and.w d1,d5
  9172.  move.b (a0,d5.w*4),d0
  9173.  add.w a4,d3
  9174.  addx.l d2,d5
  9175.  move.w (a1,d0.w*2),(a3)
  9176.  addq #4,a3
  9177.  dbcs d7,acrossscrn
  9178.  dbcc d7,backbefore
  9179. past1:
  9180.  bcc.s gotoacross
  9181.  
  9182.  move.w d4,d7
  9183.  bne.s .notdoneyet
  9184.  rts
  9185. .notdoneyet:
  9186.  
  9187.  cmp.w #32,d7
  9188.  ble.s .notoowide
  9189.  move.w #32,d7
  9190. .notoowide
  9191.  sub.w d7,d4  
  9192.  addq #4,a3
  9193.  
  9194.  dbra d7,backbefore
  9195.  rts
  9196.  
  9197.  
  9198. gotoacross:
  9199.  
  9200.  move.w d4,d7
  9201.  bne.s .notdoneyet
  9202.  rts
  9203. .notdoneyet:
  9204.  
  9205.  cmp.w #32,d7
  9206.  ble.s .notoowide
  9207.  move.w #32,d7
  9208. .notoowide
  9209.  sub.w d7,d4  
  9210.  addq #4,a3
  9211.  
  9212.  dbra d7,acrossscrn
  9213.  rts
  9214.  
  9215. leftbright: dc.l 0
  9216. brightspd: dc.l 0
  9217.  
  9218. gouraudfloor:
  9219.  
  9220.  move.w leftbright,d0
  9221.  move.l d1,d4
  9222.  move.w brightspd,d1
  9223.  
  9224.  move.w d7,d3
  9225.  asr.w #1,d7
  9226.  btst #0,d3
  9227.  beq.s .nosingle1
  9228.  move.w d5,d3
  9229.  move.l d5,d6
  9230.  lsr.w #8,d3
  9231.  swap d6
  9232.  move.b d3,d6
  9233.  move.w d0,d3
  9234.  ifeq CHEESEY
  9235.  move.b (a0,d6.w*4),d3
  9236.  endc
  9237.  ifne CHEESEY
  9238.  move.b (a0,d6.w),d3
  9239.  endc
  9240.  
  9241.  add.w d1,d0
  9242.  add.l d2,d5
  9243.  and.l d4,d5
  9244.  move.b (a1,d3.w),(a3)+
  9245. .nosingle1
  9246.  
  9247.  move.w d7,d3
  9248.  asr.w #1,d7
  9249.  btst #0,d3
  9250.  beq.s .nosingle2
  9251.  move.w d5,d3
  9252.  move.l d5,d6
  9253.  lsr.w #8,d3
  9254.  swap d6
  9255.  move.b d3,d6
  9256.  move.w d0,d3
  9257.  ifeq CHEESEY
  9258.  move.b (a0,d6.w*4),d3
  9259.  endc
  9260.  ifne CHEESEY
  9261.  move.b (a0,d6.w),d3
  9262.  endc
  9263.  add.w d1,d0
  9264.  add.l d2,d5
  9265.  and.l d4,d5
  9266.  move.l d5,d6
  9267.  swap d6
  9268.  move.b (a1,d3.w),(a3)+
  9269.  move.w d5,d3
  9270.  lsr.w #8,d3
  9271.  move.b d3,d6
  9272.  move.w d0,d3
  9273.  ifeq CHEESEY
  9274.  move.b (a0,d6.w*4),d3
  9275.  endc
  9276.  ifne CHEESEY
  9277.  move.b (a0,d6.w),d3
  9278.  endc
  9279.  add.w d1,d0
  9280.  add.l d2,d5
  9281.  and.l d4,d5
  9282.  move.b (a1,d3.w),(a3)+
  9283.  
  9284. .nosingle2
  9285.  
  9286.  move.l d5,d6
  9287.  swap d6
  9288.  
  9289.  dbra d7,acrossscrngour
  9290.  rts
  9291.  
  9292.  CNOP 0,4
  9293.  
  9294. acrossscrngour:
  9295.  move.w d5,d3
  9296.  lsr.w #8,d3
  9297.  move.b d3,d6
  9298.  move.w d0,d3
  9299.  ifeq CHEESEY
  9300.  move.b (a0,d6.w*4),d3
  9301.  endc
  9302.  ifne CHEESEY
  9303.  move.b (a0,d6.w),d3
  9304.  endc
  9305.  add.w d1,d0
  9306.  add.l d2,d5
  9307.  and.l d4,d5
  9308.  move.l d5,d6
  9309.  swap d6
  9310.  move.b (a1,d3.w),(a3)+
  9311.  move.w d5,d3
  9312.  lsr.w #8,d3
  9313.  move.b d3,d6
  9314.  move.w d0,d3
  9315.  ifeq CHEESEY
  9316.  move.b (a0,d6.w*4),d3
  9317.  endc
  9318.  ifne CHEESEY
  9319.  move.b (a0,d6.w),d3
  9320.  endc
  9321.  add.w d1,d0
  9322.  add.l d2,d5
  9323.  and.l d4,d5
  9324.  move.l d5,d6
  9325.  swap d6
  9326.  move.b (a1,d3.w),(a3)+
  9327.  move.w d5,d3
  9328.  lsr.w #8,d3
  9329.  move.b d3,d6
  9330.  move.w d0,d3
  9331.  ifeq CHEESEY
  9332.  move.b (a0,d6.w*4),d3
  9333.  endc
  9334.  ifne CHEESEY
  9335.  move.b (a0,d6.w),d3
  9336.  endc
  9337.  add.w d1,d0
  9338.  add.l d2,d5
  9339.  and.l d4,d5
  9340.  move.l d5,d6
  9341.  swap d6
  9342.  move.b (a1,d3.w),(a3)+
  9343.  move.w d5,d3
  9344.  lsr.w #8,d3
  9345.  move.b d3,d6
  9346.  move.w d0,d3
  9347.  ifeq CHEESEY
  9348.  move.b (a0,d6.w*4),d3
  9349.  endc
  9350.  ifne CHEESEY
  9351.  move.b (a0,d6.w),d3
  9352.  endc
  9353.  add.w d1,d0
  9354.  add.l d2,d5
  9355.  and.l d4,d5
  9356.  move.l d5,d6
  9357.  swap d6
  9358.  move.b (a1,d3.w),(a3)+
  9359.  dbra d7,acrossscrngour
  9360.  
  9361.  rts
  9362.  
  9363.  
  9364. gouraudfloorDOUB:
  9365.  
  9366.  move.w leftbright,d0
  9367.  move.l d1,d4
  9368.  move.w brightspd,d1
  9369.  add.w d1,d1
  9370.  add.l d2,d2
  9371.  
  9372.  move.w d7,d3
  9373.  asr.w #1,d7
  9374.  btst #0,d3
  9375.  beq.s .nosingle1
  9376.  move.w d5,d3
  9377.  move.l d5,d6
  9378.  lsr.w #8,d3
  9379.  swap d6
  9380.  move.b d3,d6
  9381.  move.w d0,d3
  9382.  ifeq CHEESEY
  9383.  move.b (a0,d6.w*4),d3
  9384.  endc
  9385.  ifne CHEESEY
  9386.  move.b (a0,d6.w),d3
  9387.  endc
  9388.  add.w d1,d0
  9389.  add.l d2,d5
  9390.  and.l d4,d5
  9391.  move.w (a1,d3.w),(a3)+
  9392. .nosingle1
  9393.  
  9394.  move.w d7,d3
  9395.  asr.w #1,d7
  9396.  btst #0,d3
  9397.  beq.s .nosingle2
  9398.  move.w d5,d3
  9399.  move.l d5,d6
  9400.  lsr.w #8,d3
  9401.  swap d6
  9402.  move.b d3,d6
  9403.  move.w d0,d3
  9404.  ifeq CHEESEY
  9405.  move.b (a0,d6.w*4),d3
  9406.  endc
  9407.  ifne CHEESEY
  9408.  move.b (a0,d6.w),d3
  9409.  endc
  9410.  add.w d1,d0
  9411.  add.l d2,d5
  9412.  and.l d4,d5
  9413.  move.l d5,d6
  9414.  swap d6
  9415.  move.w (a1,d3.w),(a3)+
  9416.  move.w d5,d3
  9417.  lsr.w #8,d3
  9418.  move.b d3,d6
  9419.  move.w d0,d3
  9420.  ifeq CHEESEY
  9421.  move.b (a0,d6.w*4),d3
  9422.  endc
  9423.  ifne CHEESEY
  9424.  move.b (a0,d6.w),d3
  9425.  endc
  9426.  add.w d1,d0
  9427.  add.l d2,d5
  9428.  and.l d4,d5
  9429.  move.w (a1,d3.w),(a3)+
  9430.  
  9431. .nosingle2
  9432.  
  9433.  move.l d5,d6
  9434.  swap d6
  9435.  
  9436.  dbra d7,acrossscrngourD
  9437.  rts
  9438.  
  9439.  CNOP 0,4
  9440.  
  9441. acrossscrngourD:
  9442.  move.w d5,d3
  9443.  lsr.w #8,d3
  9444.  move.b d3,d6
  9445.  move.w d0,d3
  9446.  ifeq CHEESEY
  9447.  move.b (a0,d6.w*4),d3
  9448.  endc
  9449.  ifne CHEESEY
  9450.  move.b (a0,d6.w),d3
  9451.  endc
  9452.  add.w d1,d0
  9453.  add.l d2,d5
  9454.  and.l d4,d5
  9455.  move.l d5,d6
  9456.  swap d6
  9457.  move.w (a1,d3.w),(a3)+
  9458.  move.w d5,d3
  9459.  lsr.w #8,d3
  9460.  move.b d3,d6
  9461.  move.w d0,d3
  9462.  ifeq CHEESEY
  9463.  move.b (a0,d6.w*4),d3
  9464.  endc
  9465.  ifne CHEESEY
  9466.  move.b (a0,d6.w),d3
  9467.  endc
  9468.  add.w d1,d0
  9469.  add.l d2,d5
  9470.  and.l d4,d5
  9471.  move.l d5,d6
  9472.  swap d6
  9473.  move.w (a1,d3.w),(a3)+
  9474.  move.w d5,d3
  9475.  lsr.w #8,d3
  9476.  move.b d3,d6
  9477.  move.w d0,d3
  9478.  ifeq CHEESEY
  9479.  move.b (a0,d6.w*4),d3
  9480.  endc
  9481.  ifne CHEESEY
  9482.  move.b (a0,d6.w),d3
  9483.  endc
  9484.  add.w d1,d0
  9485.  add.l d2,d5
  9486.  and.l d4,d5
  9487.  move.l d5,d6
  9488.  swap d6
  9489.  move.w (a1,d3.w),(a3)+
  9490.  move.w d5,d3
  9491.  lsr.w #8,d3
  9492.  move.b d3,d6
  9493.  move.w d0,d3
  9494.  ifeq CHEESEY
  9495.  move.b (a0,d6.w*4),d3
  9496.  endc
  9497.  ifne CHEESEY
  9498.  move.b (a0,d6.w),d3
  9499.  endc
  9500.  add.w d1,d0
  9501.  add.l d2,d5
  9502.  and.l d4,d5
  9503.  move.l d5,d6
  9504.  swap d6
  9505.  move.w (a1,d3.w),(a3)+
  9506.  dbra d7,acrossscrngourD
  9507.  
  9508.  rts
  9509.  
  9510.  
  9511. ;backbeforegour:
  9512. ; and.w #63*256+63,d5
  9513. ; move.b (a0,d5.w*4),d0
  9514. ; add.l d1,d0
  9515. ; bcc.s .nomoreb
  9516. ; add.w #256,d0
  9517. ;.nomoreb:
  9518. ; add.w a4,d3
  9519. ; move.w (a1,d0.w*2),(a3)+
  9520. ; addx.l d6,d5
  9521. ; dbcs d7,acrossscrngour
  9522. ; dbcc d7,backbeforegour
  9523. ; rts
  9524. ; bra.s past1gour
  9525.  
  9526. ;acrossscrngour:
  9527. ; and.l #$3f3f,d5 
  9528. ; move.b (a0,d5.w*4),d0
  9529. ; add.l d1,d0
  9530. ; bcc.s .nomoreb
  9531. ; add.w #256,d0
  9532. ;.nomoreb:
  9533. ; add.w a4,d3
  9534. ; move.w (a1,d0.w*2),(a3)+
  9535. ; addx.l d2,d5
  9536. ; dbcs d7,acrossscrngour
  9537. ; dbcc d7,backbeforegour
  9538. ;past1gour:
  9539. ; rts
  9540.  
  9541.  move.w d4,d7
  9542.  bne.s .notdoneyet
  9543.  move.l d0,leftbright
  9544.  
  9545.  rts
  9546. .notdoneyet:
  9547.  
  9548.  cmp.w #32,d7
  9549.  ble.s .notoowide
  9550.  move.w #32,d7
  9551. .notoowide
  9552.  sub.w d7,d4  
  9553.  addq #4,a3
  9554.  
  9555. ; dbra d7,backbeforegour
  9556.  rts
  9557.  
  9558.  
  9559. gotoacrossgour:
  9560.  
  9561.  move.w d4,d7
  9562.  bne.s .notdoneyet
  9563.  rts
  9564. .notdoneyet:
  9565.  
  9566.  cmp.w #32,d7
  9567.  ble.s .notoowide
  9568.  move.w #32,d7
  9569. .notoowide
  9570.  sub.w d7,d4  
  9571.  addq #4,a3
  9572.  
  9573.  dbra d7,acrossscrngour
  9574.  rts
  9575.  
  9576.  
  9577. waterpt: dc.l waterlist
  9578.  
  9579. waterlist:
  9580.  dc.l waterfile
  9581.  dc.l waterfile+2
  9582.  dc.l waterfile+256
  9583.  dc.l waterfile+256+2
  9584.  dc.l waterfile+512
  9585.  dc.l waterfile+512+2
  9586.  dc.l waterfile+768
  9587.  dc.l waterfile+768+2
  9588. ; dc.l waterfile+768
  9589. ; dc.l waterfile+512+2
  9590. ; dc.l waterfile+512
  9591. ; dc.l waterfile+256+2
  9592. ; dc.l waterfile+256
  9593. ; dc.l waterfile+2
  9594. endwaterlist:
  9595.  
  9596. watertouse: dc.l waterfile
  9597.  
  9598. wtan: dc.w 0
  9599. wateroff: dc.l 0
  9600.  
  9601. REFLECTIONWATER:
  9602.  
  9603.  move.l d1,d4
  9604.  
  9605.  add.l wateroff,d5
  9606.  
  9607.  move.l #brightentab,a1
  9608.  move.l dst,d0
  9609.  clr.b d0
  9610.  
  9611.  add.w d0,d0
  9612.  cmp.w #12*512,d0
  9613.  blt.s .notoowater
  9614.  move.w #12*512,d0
  9615.  
  9616. .notoowater:
  9617.   
  9618.  adda.w d0,a1
  9619.  
  9620.  move.l dst,d0
  9621.  asl.w #7,d0
  9622.  add.w wtan,d0
  9623.  and.w #8191,d0
  9624.  move.l #SineTable,a0
  9625.  move.w (a0,d0.w),d0
  9626.  ext.l d0
  9627.  
  9628.  move.l dst,d3
  9629.  add.w #300,d3
  9630.  divs d3,d0
  9631.  asr.w #5,d0
  9632.  addq #4,d0
  9633.  cmp.w disttobot,d0
  9634.  blt.s oknotoffbotototr
  9635.  
  9636.  move.w disttobot,d0
  9637.  subq #1,d0
  9638.  
  9639. oknotoffbotototr
  9640.  
  9641. ; move.w dst,d3
  9642. ; asr.w #7,d3
  9643. ; add.w d3,d0
  9644.  
  9645.  muls #320,d0
  9646.  tst.w above
  9647.  beq.s nonnnnnegr
  9648.  neg.l d0
  9649.  
  9650. nonnnnnegr:
  9651.  
  9652.  move.l d0,a6
  9653.  
  9654.  move.l watertouse,a0
  9655.  
  9656. ; move.l #mixtab,a5
  9657.  
  9658.  moveq #0,d1
  9659.  
  9660.  move.w startsmoothx,d3
  9661.  dbra d7,acrossscrnwr
  9662.  rts
  9663.  
  9664. backbeforewr:
  9665.  and.w d1,d5 
  9666.  move.w (a0,d5.w*4),d0
  9667.  move.b (a3,a6.w),d0
  9668.  move.w (a1,d0.w),(a3)+
  9669.  add.w a4,d3
  9670.  addx.l d6,d5
  9671.  dbcs d7,acrossscrnwr
  9672.  dbcc d7,backbeforewr
  9673.  rts
  9674.  
  9675. acrossscrnwr:
  9676.  move.w d5,d3
  9677.  move.l d5,d6
  9678.  lsr.w #8,d3
  9679.  swap d6
  9680.  move.b d3,d6
  9681.  move.w (a0,d6.w*4),d0
  9682.  add.l d2,d5
  9683.  move.w (a4,a6.w),d1
  9684.  addq #2,a4
  9685.  move.b (a3,a6.w),d1
  9686.  move.b (a5,d1.l),d0
  9687.  and.l d4,d5
  9688.  move.w (a1,d0.w),(a3)+
  9689.  dbra d7,acrossscrnwr
  9690.  rts
  9691.  
  9692. texturedwater:
  9693.  
  9694.  move.l d1,d4
  9695.  
  9696.  add.l wateroff,d5
  9697.  
  9698.  move.l #brightentab,a1
  9699.  move.l dst,d0
  9700.  asr.l #1,d0
  9701.  clr.b d0
  9702.  
  9703.  add.w d0,d0
  9704.  cmp.w #9*512,d0
  9705.  blt.s .notoowater
  9706.  move.w #9*512,d0
  9707. .notoowater:
  9708.   
  9709.  adda.w d0,a1
  9710.  
  9711.  move.l dst,d0
  9712.  asl.w #7,d0
  9713.  add.w wtan,d0
  9714.  and.w #8191,d0
  9715.  move.l #SineTable,a0
  9716.  move.w (a0,d0.w),d0
  9717.  ext.l d0
  9718.  
  9719.  move.l dst,d3
  9720.  add.w #300,d3
  9721.  divs d3,d0
  9722.  asr.w #5,d0
  9723.  addq #4,d0
  9724.  cmp.w disttobot,d0
  9725.  blt.s oknotoffbototot
  9726.  
  9727.  move.w disttobot,d0
  9728.  subq #1,d0
  9729.  
  9730. oknotoffbototot
  9731.  
  9732. ; move.w dst,d3
  9733. ; asr.w #7,d3
  9734. ; add.w d3,d0
  9735.  
  9736.  tst.b DOUBLEHEIGHT
  9737.  beq.s .nodoub
  9738.  and.b #$fe,d0
  9739. .nodoub:
  9740.  
  9741.  muls #320,d0
  9742.  tst.w above
  9743.  beq.s nonnnnneg
  9744.  neg.l d0
  9745.  
  9746. nonnnnneg:
  9747.  
  9748.  move.l d0,a6
  9749.  
  9750.  move.l watertouse,a0
  9751.  
  9752.  move.w startsmoothx,d3
  9753.  dbra d7,acrossscrnw
  9754.  rts
  9755.  
  9756. backbeforew:
  9757.  and.w d1,d5
  9758.  move.w (a0,d5.w*4),d0
  9759.  move.b (a3,a6.w),d0
  9760.  move.b (a1,d0.w),(a3)+
  9761.  add.w a4,d3
  9762.  addx.l d6,d5
  9763.  dbcs d7,acrossscrnw
  9764.  dbcc d7,backbeforew
  9765.  rts
  9766.  
  9767. acrossscrnw:
  9768.  move.w d5,d3
  9769.  move.l d5,d6
  9770.  lsr.w #8,d3
  9771.  swap d6
  9772.  move.b d3,d6
  9773.  move.w (a0,d6.w*4),d0
  9774.  add.l d2,d5
  9775.  move.b (a3,a6.w),d0
  9776.  and.l d4,d5
  9777.  move.b (a1,d0.w),(a3)+
  9778.  dbra d7,acrossscrnw
  9779.  rts
  9780.  
  9781.  
  9782. texturedwaterDOUB:
  9783.  
  9784.  move.l d1,d4
  9785.  
  9786.  add.l wateroff,d5
  9787.  
  9788.  move.l #brightentab,a1
  9789.  move.l dst,d0
  9790.  asr.l #1,d0
  9791.  clr.b d0
  9792.  
  9793.  add.w d0,d0
  9794.  cmp.w #9*512,d0
  9795.  blt.s .notoowater
  9796.  move.w #9*512,d0
  9797. .notoowater:
  9798.   
  9799.  adda.w d0,a1
  9800.  
  9801.  move.l dst,d0
  9802.  asl.w #7,d0
  9803.  add.w wtan,d0
  9804.  and.w #8191,d0
  9805.  move.l #SineTable,a0
  9806.  move.w (a0,d0.w),d0
  9807.  ext.l d0
  9808.  
  9809.  move.l dst,d3
  9810.  add.w #300,d3
  9811.  divs d3,d0
  9812.  asr.w #5,d0
  9813.  addq #4,d0
  9814.  cmp.w disttobot,d0
  9815.  blt.s .oknotoffbototot
  9816.  
  9817.  move.w disttobot,d0
  9818.  subq #1,d0
  9819.  
  9820. .oknotoffbototot
  9821.  
  9822. ; move.w dst,d3
  9823. ; asr.w #7,d3
  9824. ; add.w d3,d0
  9825.  
  9826.  tst.b DOUBLEHEIGHT
  9827.  beq.s .nodoub
  9828.  and.b #$fe,d0
  9829. .nodoub:
  9830.  
  9831.  muls #320,d0
  9832.  tst.w above
  9833.  beq.s .nonnnnneg
  9834.  neg.l d0
  9835.  
  9836. .nonnnnneg:
  9837.  
  9838.  move.l d0,a6
  9839.  
  9840.  move.l watertouse,a0
  9841.  
  9842.  add.l d2,d2
  9843.  
  9844.  move.w startsmoothx,d3
  9845.  dbra d7,acrossscrnwD
  9846.  rts
  9847.  
  9848.  
  9849. acrossscrnwD:
  9850.  move.w d5,d3
  9851.  move.l d5,d6
  9852.  lsr.w #8,d3
  9853.  swap d6
  9854.  move.b d3,d6
  9855.  move.w (a0,d6.w*4),d0
  9856.  add.l d2,d5
  9857.  move.b (a3,a6.w),d0
  9858.  and.l d4,d5
  9859.  move.w (a1,d0.w),(a3)+
  9860.  dbra d7,acrossscrnwD
  9861.  rts
  9862.  
  9863.  
  9864. usewater: dc.w 0
  9865.  dc.w 0
  9866. startsmoothx: dc.w 0
  9867.  dc.w 0
  9868. startsmoothz: dc.w 0
  9869.  
  9870. ********************************
  9871. *
  9872.  include "AB3:source_4000/ObjDrawHIRES.s"
  9873. *
  9874. ********************************
  9875.  
  9876. numframes:
  9877.  dc.w 0
  9878.  
  9879. alframe: dc.l 0
  9880.  
  9881. alan:
  9882.  dcb.l 8,0
  9883.  dcb.l 8,1
  9884.  dcb.l 8,2
  9885.  dcb.l 8,3
  9886. endalan:
  9887.  
  9888. alanptr: dc.l alan
  9889.  
  9890. Time2: dc.l 0
  9891. dispco:
  9892.  dc.w 0
  9893.  
  9894.  
  9895. key_interrupt:
  9896.         movem.l    d0-d7/a0-a6,-(sp)
  9897.  
  9898. ;        move.w    INTREQR,d0
  9899. ;        btst    #3,d0
  9900. ;        beq    .not_key
  9901.  
  9902.         move.b    $bfdd00,d0
  9903.         btst    #0,d0
  9904.         bne    .key_cont
  9905. ;        move.b    $bfed01,d0
  9906. ;        btst    #0,d0
  9907. ;        bne    .key_cont
  9908.     
  9909. ;        btst    #3,d0
  9910. ;        beq    .key_cont
  9911.  
  9912.         move.b    $bfec01,d0
  9913.         clr.b    $bfec01
  9914.  
  9915.         tst.b    d0
  9916.         beq    .key_cont
  9917.  
  9918. ;        bset    #6,$bfee01
  9919. ;        move.b    #$f0,$bfe401
  9920. ;        move.b    #$00,$bfe501
  9921. ;        bset    #0,$bfee01
  9922.  
  9923.  
  9924.         not.b    d0
  9925.         ror.b    #1,d0
  9926.         lea.l    KeyMap,a0
  9927.         tst.b    d0
  9928.         bmi.b    .key_up
  9929.         and.w    #$7f,d0
  9930. ;        add.w    #1,d0
  9931.         move.b    #$ff,(a0,d0.w)
  9932.         move.b    d0,lastpressed
  9933.  
  9934.         bra.b    .key_cont2
  9935. .key_up:
  9936.         and.w    #$7f,d0
  9937. ;        add.w    #1,d0
  9938.         move.b    #$00,(a0,d0.w)
  9939.  
  9940. .key_cont2
  9941. ;        btst    #0,$bfed01
  9942. ;        beq    .key_cont2
  9943. ;        move.b    #%00000000,$bfee01
  9944. ;        move.b    #%10001000,$bfed01
  9945.  
  9946. ;alt keys should not be independent so overlay ralt on lalt
  9947.  
  9948.         
  9949. .key_cont
  9950.  
  9951. ;        move.w    #$0008,INTREQ
  9952. .not_key:    ;lea.l    $dff000,a5
  9953.  
  9954. ;        lea.l    _keypressed(pc),a0
  9955. ;        move.b    101(a0),d0    ;read LALT
  9956. ;        or.b    102(a0),d0    ;blend it with RALT
  9957. ;        move.b    d0,127(a0)    ;save in combined position
  9958.  
  9959.         movem.l    (sp)+,d0-d7/a0-a6
  9960.  
  9961.         rts
  9962.  
  9963. lastpressed:    dc.b 0
  9964. KInt_CCode    Ds.b    1
  9965. KInt_Askey    Ds.b    1
  9966. KInt_OCode    Ds.w    1
  9967.  
  9968.  
  9969. OldSpace: dc.b 0
  9970. SpaceTapped: dc.b 0
  9971. PLR1_SPCTAP: dc.b 0
  9972. PLR2_SPCTAP: dc.b 0
  9973. PLR1_Ducked: dc.b 0
  9974. PLR2_Ducked: dc.b 0
  9975.  even
  9976.  
  9977.  include "ab3:source_4000/PLR1CONTROL.s"
  9978.  include "ab3:source_4000/PLR2CONTROL.s"
  9979.  include "ab3:source_4000/FALL.s"
  9980.  
  9981. prot7: dc.w 0
  9982.  
  9983. GOTTOSEND: dc.w 0
  9984.  
  9985. OtherInter:
  9986.  move.w #$0010,$dff000+intreq
  9987.  movem.l d0-d7/a0-a6,-(a7)
  9988.  bra justshake
  9989.  
  9990.     cnop 0,4
  9991.  
  9992. Chan0inter:
  9993.  
  9994.     SAVEREGS
  9995.     jsr    .routine
  9996.     GETREGS
  9997.  
  9998. ;    move.w    #1024+'.',$dff030
  9999.     
  10000.     moveq #1,d0
  10001.     rts
  10002.  
  10003. .routine
  10004.  
  10005.     
  10006. ;w move.w #$0010,$dff000+intreq
  10007.  
  10008.  tst.b doanything
  10009.  bne dosomething
  10010.  
  10011.  movem.l d0-d7/a0-a6,-(a7)
  10012.  bra JUSTSOUNDS
  10013.  
  10014.  rts
  10015.  
  10016. tabheld: dc.w 0
  10017. ObjWork: ds.l 512
  10018. WORKPTR: dc.l 0
  10019. thistime: dc.w 0
  10020.  
  10021. DOALLANIMS:
  10022.  
  10023.  sub.b #1,thistime
  10024.  ble.s .okdosome
  10025.  rts
  10026.  
  10027. .okdosome:
  10028.  move.b #5,thistime
  10029.  
  10030.  
  10031.  move.l #ObjWork,a5
  10032.  move.l ObjectData,a0
  10033. Objectloop2:
  10034.  tst.w (a0)
  10035.  blt doneallobj2
  10036.  move.w 12(a0),d0
  10037.  blt doneobj2
  10038.  move.w d0,GraphicRoom(a0)
  10039.  tst.b worry(a0)
  10040.  beq.s doneobj2
  10041.  
  10042.  move.b 16(a0),d0
  10043.  cmp.b #1,d0
  10044.  blt JUMPALIENANIM
  10045.  beq JUMPOBJECTANIM
  10046. ; cmp.b #2,d0
  10047. ; beq JUMPBULLET
  10048.  
  10049. doneobj2:
  10050.  
  10051.  adda.w #64,a0
  10052.  addq #8,a5
  10053.  bra Objectloop2
  10054.  
  10055. doneallobj2:
  10056.  rts
  10057.  
  10058. JUMPALIENANIM:
  10059.  
  10060.  moveq #0,d0
  10061.  move.b WhichAnim(a0),d0
  10062. ; 0=walking
  10063. ; 1=attacking
  10064. ; 2=getting hit
  10065. ; 3=dying
  10066.  
  10067.  cmp.b #1,d0
  10068.  blt.s ALWALK
  10069.  beq.s ALATTACK
  10070.  
  10071.  cmp.b #3,d0
  10072.  blt ALGETHIT
  10073.  beq ALDIE
  10074.  
  10075.  bra doneobj2
  10076.  
  10077. ALDIE
  10078.  move.l #10,d0
  10079.  bra intowalk
  10080.  
  10081. ALGETHIT:
  10082.  move.l #9,d0
  10083.  bra intowalk
  10084.  
  10085. ALATTACK:
  10086.  move.l #8,d0
  10087.  bra intowalk
  10088.  
  10089. AUXOBJ: dc.w 0
  10090.  
  10091. ALWALK:
  10092.  
  10093.  jsr ViewpointToDraw
  10094.  add.l d0,d0
  10095.  
  10096.  move.l LINKFILE,a6
  10097.  add.l #AlienStats,a6
  10098.  moveq #0,d1
  10099.  move.b TypeOfThing(a0),d1
  10100.  muls #AlienStatLen,d1
  10101.  add.l d1,a6
  10102.  cmp.w #1,A_GFXType(a6)
  10103.  bne.s NOSIDES2
  10104.  
  10105.  moveq #0,d0
  10106. intowalk:
  10107.  
  10108. NOSIDES2:
  10109.  
  10110.  move.b d0,2(a5)
  10111.  move.l LINKFILE,a6
  10112.  
  10113.  add.l #AlienAnimData,a6
  10114.  
  10115.  moveq #0,d1
  10116.  move.b TypeOfThing(a0),d1
  10117.  muls #A_AnimLen,d1
  10118.  add.l d1,a6
  10119.  
  10120. ; move.l ANIMPOINTER,a6
  10121.  
  10122.  muls #A_OptLen,d0
  10123.  add.w d0,a6
  10124.  
  10125.  move.w SecTimer(a0),d1
  10126.  move.w d1,d2
  10127.  muls #A_FrameLen,d1
  10128.  
  10129.  moveq #0,d0
  10130.  move.b 5(a6,d1.w),d0
  10131.  beq.s .nosoundmake
  10132.  
  10133.  movem.l d0-d7/a0-a6,-(a7)
  10134.  subq #1,d0
  10135.  move.w d0,Samplenum
  10136.  clr.b notifplaying
  10137.  move.b 1(a0),IDNUM
  10138.  move.w #80,Noisevol
  10139.  move.l #ObjRotated,a1
  10140.  move.w (a0),d0
  10141.  lea (a1,d0.w*8),a1
  10142.  move.l (a1),Noisex
  10143.  jsr MakeSomeNoise
  10144.  movem.l (a7)+,d0-d7/a0-a6
  10145. .nosoundmake
  10146.  
  10147.  move.b 6(a6,d1.w),d0
  10148.  beq.s .noaction
  10149.  add.b #1,(a5)
  10150.  move.b d2,1(a5)
  10151. .noaction
  10152.  
  10153.  addq #1,d2
  10154.  
  10155.  moveq #0,d0
  10156.  move.b 7(a6,d1.w),d0
  10157.  beq.s .nospecial
  10158.  
  10159.  move.b d0,d3
  10160.  and.w #63,d3
  10161.  lsr.w #6,d0
  10162.  cmp.w #2,d0
  10163.  blt.s .storeval
  10164.  beq.s .randval
  10165.  
  10166.  sub.b #1,4(a5)
  10167.  beq.s .nospecial
  10168.  
  10169.  move.w d3,d2
  10170.  bra.s .nospecial
  10171.  
  10172. .randval:
  10173.  jsr GetRand
  10174.  divs d3,d0
  10175.  swap d0
  10176.  move.w d0,d3
  10177.  
  10178. .storeval:
  10179.  move.b d3,4(a5)
  10180. .nospecial:
  10181.  
  10182.  move.w d2,d3
  10183.  muls #A_FrameLen,d3
  10184.  tst.b (a6,d3.w)
  10185.  bge.s .noendanim
  10186.  st 3(a5)
  10187.  move.w #0,d2
  10188. .noendanim
  10189.  move.w d2,SecTimer(a0)
  10190.  
  10191.  bra doneobj2
  10192.  
  10193.  
  10194. JUMPOBJECTANIM:
  10195.  bra doneobj2
  10196.  
  10197. timetodamage: dc.w 0
  10198. SAVESAVE: dc.w 0
  10199.  
  10200. dosomething:
  10201.  
  10202.  
  10203.  
  10204.  addq.w #1,FramesToDraw
  10205.  movem.l d0-d7/a0-a6,-(a7)
  10206.  
  10207.  jsr NARRATOR
  10208.  
  10209.  bsr DOALLANIMS
  10210.  
  10211.  sub.w #1,timetodamage
  10212.  bgt.s .nodam
  10213.  
  10214.  move.w #100,timetodamage
  10215.  
  10216.  move.l PLR1_Roompt,a0
  10217.  move.w ToFloorNoise(a0),d0
  10218.  tst.b PLR1_StoodInTop
  10219.  beq.s .okinbot
  10220.  move.w ToUpperFloorNoise(a0),d0
  10221. .okinbot:
  10222.  
  10223.  move.l LINKFILE,a0
  10224.  add.l #FloorData,a0
  10225.  move.w (a0,d0.w*4),d0    ; damage. 
  10226.  move.l PLR1_Obj,a0
  10227.  add.b d0,damagetaken(a0)
  10228.  
  10229.  move.l PLR2_Roompt,a0
  10230.  move.w ToFloorNoise(a0),d0
  10231.  tst.b PLR2_StoodInTop
  10232.  beq.s .okinbot2
  10233.  move.w ToUpperFloorNoise(a0),d0
  10234. .okinbot2:
  10235.  
  10236.  move.l LINKFILE,a0
  10237.  add.l #FloorData,a0
  10238.  move.w (a0,d0.w*4),d0    ; damage. 
  10239.  
  10240.  move.l PLR2_Obj,a0
  10241.  add.b d0,damagetaken(a0)
  10242.  
  10243. .nodam:
  10244.  
  10245.  move.l #KeyMap,a5
  10246.  
  10247.  tst.b $42(a5)
  10248.  bne.s .tabprsd
  10249.  clr.b tabheld
  10250.  bra.s .noswitch
  10251.  
  10252. .tabprsd:
  10253.  tst.b tabheld
  10254.  bne.s .noswitch
  10255.  not.b MAPON
  10256.  st tabheld
  10257. .noswitch
  10258.  
  10259.  tst.b $3e(a5)
  10260.  sne d0
  10261.  tst.b $1e(a5)
  10262.  sne d1
  10263.  tst.b $2d(a5)
  10264.  sne d2
  10265.  tst.b $2f(a5)
  10266.  sne d3
  10267.  
  10268.  tst.b $3d(a5)
  10269.  sne d4
  10270.  tst.b $3f(a5)
  10271.  sne d5
  10272.  tst.b $1d(a5)
  10273.  sne d6
  10274.  tst.b $1f(a5)
  10275.  sne d7
  10276.  
  10277.  or.b d4,d0
  10278.  or.b d5,d0
  10279.  or.b d6,d1
  10280.  or.b d7,d1
  10281.  or.b d4,d2
  10282.  or.b d6,d2
  10283.  or.b d7,d3
  10284.  or.b d5,d3
  10285.  
  10286.  move.w MAPBRIGHT,d4
  10287.  add.w #2,d4
  10288.  clr.l d5
  10289.  bset d4,d5
  10290.  
  10291.  tst.b d0
  10292.  beq.s .nomapup
  10293.  sub.w d5,mapzoff
  10294. .nomapup 
  10295.  
  10296.  tst.b d1
  10297.  beq.s .nomapdown
  10298.  add.w d5,mapzoff
  10299. .nomapdown 
  10300.  
  10301.  tst.b d2
  10302.  beq.s .nomapleft
  10303.  add.w d5,mapxoff
  10304. .nomapleft 
  10305.  
  10306.  tst.b d3
  10307.  beq.s .nomapright
  10308.  sub.w d5,mapxoff
  10309. .nomapright 
  10310.  
  10311.  tst.b $2e(a5)
  10312.  beq.s .nomapcentre
  10313.  
  10314.  move.w #0,mapxoff
  10315.  move.w #0,mapzoff
  10316.  
  10317. .nomapcentre
  10318.  
  10319. ; move.w STOPOFFSET,d0
  10320. ; tst.b 27(a5)
  10321. ; beq.s .nolookup
  10322. ; sub.w #5,d0
  10323. ; cmp.w #-80,d0
  10324. ; bgt.s .nolookup
  10325. ; move.w #-80,d0
  10326. ;.nolookup:
  10327. ; tst.b 42(a5)
  10328. ; beq.s .nolookdown
  10329. ; add.w #5,d0
  10330. ; cmp.w #80,d0
  10331. ; blt.s .nolookdown
  10332. ; move.w #80,d0
  10333. ;.nolookdown:
  10334. ;
  10335. ; move.w d0,STOPOFFSET
  10336. ; neg.w d0
  10337. ; add.w #120,d0
  10338. ; move.w d0,SMIDDLEY
  10339. ; muls #320*2,d0
  10340. ; move.l d0,SBIGMIDDLEY
  10341.  
  10342.  
  10343. ; jsr INITREC
  10344. ; jsr RECEIVE
  10345.  
  10346. ; tst.l BUFFER
  10347. ; beq.s justshake
  10348. ; st GOTTOSEND
  10349. ; move.l #OtherInter,$6c
  10350.  
  10351. justshake:
  10352.  
  10353.  cmp.b #'b',Prefsfile+3
  10354.  bne.s .noback
  10355.  jsr mt_music
  10356. .noback:
  10357.  
  10358.  bra dontshowtime
  10359.  
  10360.  tst.b oktodisplay
  10361.  beq dontshowtime
  10362.  clr.b oktodisplay
  10363.  subq.w #1,dispco
  10364.  bgt dontshowtime
  10365.  move.w #10,dispco
  10366.  
  10367.  move.l #TimerScr+10,a0
  10368.  move.l TimeCount,d0
  10369.  bge.s timenotneg
  10370.  move.l #1111*256,d0
  10371. timenotneg:
  10372.  asr.l #8,d0
  10373.  move.l #digits,a1
  10374.  move.w #7,d2
  10375. digitlop
  10376.  divs #10,d0
  10377.  swap d0
  10378.  lea (a1,d0.w*8),a2
  10379.  move.b (a2)+,(a0)
  10380.  move.b (a2)+,24(a0)
  10381.  move.b (a2)+,24*2(a0)
  10382.  move.b (a2)+,24*3(a0)
  10383.  move.b (a2)+,24*4(a0)
  10384.  move.b (a2)+,24*5(a0)
  10385.  move.b (a2)+,24*6(a0)
  10386.  move.b (a2)+,24*7(a0)
  10387.  subq #1,a0
  10388.  swap d0
  10389.  ext.l d0
  10390.  dbra d2,digitlop
  10391.  
  10392.  move.l #TimerScr+10+24*10,a0
  10393.  move.l NumTimes,d0
  10394.  move.l #digits,a1
  10395.  move.w #3,d2
  10396. digitlop2
  10397.  divs #10,d0
  10398.  swap d0
  10399.  lea (a1,d0.w*8),a2
  10400.  move.b (a2)+,(a0)
  10401.  move.b (a2)+,24(a0)
  10402.  move.b (a2)+,24*2(a0)
  10403.  move.b (a2)+,24*3(a0)
  10404.  move.b (a2)+,24*4(a0)
  10405.  move.b (a2)+,24*5(a0)
  10406.  move.b (a2)+,24*6(a0)
  10407.  move.b (a2)+,24*7(a0)
  10408.  subq #1,a0
  10409.  swap d0
  10410.  ext.l d0
  10411.  dbra d2,digitlop2
  10412.  
  10413.  move.l #TimerScr+10+24*20,a0
  10414.  moveq #0,d0
  10415.  move.w FramesToDraw,d0
  10416.  move.l #digits,a1
  10417.  move.w #2,d2
  10418. digitlop3
  10419.  divs #10,d0
  10420.  swap d0
  10421.  lea (a1,d0.w*8),a2
  10422.  move.b (a2)+,(a0)
  10423.  move.b (a2)+,24(a0)
  10424.  move.b (a2)+,24*2(a0)
  10425.  move.b (a2)+,24*3(a0)
  10426.  move.b (a2)+,24*4(a0)
  10427.  move.b (a2)+,24*5(a0)
  10428.  move.b (a2)+,24*6(a0)
  10429.  move.b (a2)+,24*7(a0)
  10430.  subq #1,a0
  10431.  swap d0
  10432.  ext.l d0
  10433.  dbra d2,digitlop3
  10434.  
  10435. dontshowtime:
  10436.  
  10437.  
  10438.  move.l alanptr,a0
  10439.  move.l (a0)+,alframe
  10440.  cmp.l #endalan,a0
  10441.  blt.s nostartalan
  10442.  move.l #alan,a0
  10443. nostartalan:
  10444.  move.l a0,alanptr
  10445.  
  10446.  
  10447.  tst.b READCONTROLS
  10448.  beq nocontrols
  10449.  
  10450.  cmp.b #'s',mors
  10451.  beq control2
  10452.  
  10453.  tst.w PLAYERONEHEALTH
  10454.  bgt .propercontrol
  10455.  
  10456.  move.l #7*2116,hitcol
  10457.  move.l #PLR1_Obj,a0
  10458.  move.w #-1,12+128(a0)
  10459.  
  10460.  clr.b PLR1_fire
  10461.  clr.b PLR1_clicked
  10462.  move.w #0,ADDTOBOBBLE
  10463.  move.l #playercrouched,PLR1s_height
  10464.  move.w #-80,d0
  10465.  move.w d0,STOPOFFSET
  10466.  neg.w d0
  10467.  add.w TOTHEMIDDLE,d0
  10468.  move.w d0,SMIDDLEY
  10469.  muls #320,d0
  10470.  move.l d0,SBIGMIDDLEY
  10471.  jsr PLR1_fall
  10472.  
  10473.  move.l PLR1s_xspdval,d6
  10474.  move.l PLR1s_zspdval,d7
  10475.  
  10476.  tst.b SLOWDOWN
  10477.  beq.s .nofriction
  10478.  
  10479.  neg.l d6
  10480.  ble.s .nobug1
  10481.  asr.l #3,d6
  10482.  add.l #1,d6
  10483.  bra.s .bug1
  10484. .nobug1
  10485.  asr.l #3,d6
  10486. .bug1:
  10487.  
  10488.  neg.l d7
  10489.  ble.s .nobug2
  10490.  asr.l #3,d7
  10491.  add.l #1,d7
  10492.  bra.s .bug2
  10493. .nobug2
  10494.  asr.l #3,d7
  10495. .bug2: 
  10496.  
  10497.  add.l d6,PLR1s_xspdval
  10498.  add.l d7,PLR1s_zspdval
  10499.  
  10500. .nofriction:
  10501.  move.l PLR1s_xspdval,d6
  10502.  move.l PLR1s_zspdval,d7
  10503.  add.l d6,PLR1s_xoff
  10504.  add.l d7,PLR1s_zoff
  10505.  
  10506.  move.w PLR1s_angspd,d3
  10507.  tst.b SLOWDOWN
  10508.  beq.s .nofric
  10509.  asr.w #2,d3
  10510.  bge.s .nneg
  10511.  addq #1,d3
  10512. .nneg:
  10513. .nofric:
  10514.  
  10515.  move.w d3,PLR1s_angspd
  10516.  add.w d3,PLR1s_angpos
  10517.  add.w d3,PLR1s_angpos
  10518.  and.w #8190,PLR1s_angpos
  10519.  
  10520.  bra nocontrols
  10521.  
  10522. .propercontrol:
  10523.  
  10524.  tst.b PLR1MOUSE
  10525.  beq.s PLR1_nomouse
  10526.  bsr PLR1_mouse_control
  10527. PLR1_nomouse:
  10528.  tst.b PLR1KEYS
  10529.  beq.s PLR1_nokeys
  10530.  bsr PLR1_keyboard_control
  10531. PLR1_nokeys:
  10532. ; tst.b PLR1PATH
  10533. ; beq.s PLR1_nopath
  10534. ; bsr PLR1_follow_path
  10535. ;PLR1_nopath:
  10536.  tst.b PLR1JOY
  10537.  beq.s PLR1_nojoy
  10538.  bsr PLR1_JoyStick_control
  10539. PLR1_nojoy: 
  10540.  bra nocontrols
  10541.  
  10542. control2:
  10543.  
  10544.  tst.w PLAYERTWOHEALTH
  10545.  bgt .propercontrol
  10546.  
  10547.  move.l #7*2116,hitcol
  10548.  move.l #PLR1_Obj,a0
  10549.  move.w #-1,12+128(a0)
  10550.  clr.b PLR2_fire
  10551.  move.w #0,ADDTOBOBBLE
  10552.  move.l #playercrouched,PLR2s_height
  10553.  move.w #-80,d0
  10554.  move.w d0,STOPOFFSET
  10555.  neg.w d0
  10556.  add.w TOTHEMIDDLE,d0
  10557.  move.w d0,SMIDDLEY
  10558.  muls #320,d0
  10559.  move.l d0,SBIGMIDDLEY
  10560.  jsr PLR2_fall
  10561.  
  10562.  move.l PLR2s_xspdval,d6
  10563.  move.l PLR2s_zspdval,d7
  10564.  
  10565.  tst.b SLOWDOWN
  10566.  beq.s .nofriction
  10567.  
  10568.  neg.l d6
  10569.  ble.s .nobug1
  10570.  asr.l #3,d6
  10571.  add.l #1,d6
  10572.  bra.s .bug1
  10573. .nobug1
  10574.  asr.l #3,d6
  10575. .bug1:
  10576.  
  10577.  neg.l d7
  10578.  ble.s .nobug2
  10579.  asr.l #3,d7
  10580.  add.l #1,d7
  10581.  bra.s .bug2
  10582. .nobug2
  10583.  asr.l #3,d7
  10584. .bug2: 
  10585.  
  10586.  add.l d6,PLR2s_xspdval
  10587.  add.l d7,PLR2s_zspdval
  10588.  
  10589. .nofriction:
  10590.  move.l PLR2s_xspdval,d6
  10591.  move.l PLR2s_zspdval,d7
  10592.  add.l d6,PLR2s_xoff
  10593.  add.l d7,PLR2s_zoff
  10594.  
  10595.  move.w PLR2s_angspd,d3
  10596.  tst.b SLOWDOWN
  10597.  beq.s .nofric
  10598.  asr.w #2,d3
  10599.  bge.s .nneg
  10600.  addq #1,d3
  10601. .nneg:
  10602. .nofric:
  10603.  
  10604.  move.w d3,PLR2s_angspd
  10605.  add.w d3,PLR2s_angpos
  10606.  add.w d3,PLR2s_angpos
  10607.  and.w #8190,PLR2s_angpos
  10608.  
  10609.  bra.s nocontrols
  10610.  
  10611. .propercontrol:
  10612.  tst.b PLR2MOUSE
  10613.  beq.s PLR2_nomouse
  10614.  bsr PLR2_mouse_control
  10615. PLR2_nomouse:
  10616.  tst.b PLR2KEYS
  10617.  beq.s PLR2_nokeys
  10618.  bsr PLR2_keyboard_control
  10619. PLR2_nokeys:
  10620. ; tst.b PLR2PATH
  10621. ; beq.s PLR2_nopath
  10622. ; bsr PLR1_follow_path
  10623. ;PLR2_nopath:
  10624.  tst.b PLR2JOY
  10625.  beq.s PLR2_nojoy
  10626.  bsr PLR2_JoyStick_control
  10627. PLR2_nojoy: 
  10628.  
  10629.  
  10630. nocontrols:
  10631.  
  10632.  move.l #$dff000,a6
  10633.  
  10634.  cmp.b #'4',Prefsfile+1
  10635.  bne.s nomuckabout
  10636.  
  10637.  move.w #$0,d0 
  10638.  tst.b NoiseMade0LEFT
  10639.  beq.s noturnoff0
  10640.  move.w #1,d0
  10641. noturnoff0:
  10642.  tst.b NoiseMade0RIGHT
  10643.  beq.s noturnoff1
  10644.  or.w #2,d0
  10645. noturnoff1:
  10646.  tst.b NoiseMade1RIGHT
  10647.  beq.s noturnoff2
  10648.  or.w #4,d0
  10649. noturnoff2:
  10650.  tst.b NoiseMade1LEFT
  10651.  beq.s noturnoff3
  10652.  or.w #8,d0
  10653. noturnoff3:
  10654.     move.w d0,dmacon(a6)
  10655.  
  10656. nomuckabout:
  10657.  
  10658.  
  10659. ; tst.b PLR2_fire
  10660. ; beq.s firenotpressed2
  10661. ; fire was pressed last time.
  10662. ; btst #7,$bfe001
  10663. ; bne.s firenownotpressed2
  10664. ; fire is still pressed this time.
  10665. ; st PLR2_fire
  10666. ; bra dointer
  10667.  
  10668. firenownotpressed2:
  10669. ; fire has been released.
  10670. ; clr.b PLR2_fire
  10671. ; bra dointer
  10672.  
  10673. firenotpressed2
  10674.  
  10675. ; fire was not pressed last frame...
  10676.  
  10677. ; btst #7,$bfe001
  10678. ; if it has still not been pressed, go back above
  10679. ; bne.s firenownotpressed2
  10680. ; fire was not pressed last time, and was this time, so has
  10681. ; been clicked.
  10682. ; st PLR2_clicked
  10683. ; st PLR2_fire
  10684.  
  10685. dointer
  10686.  
  10687. JUSTSOUNDS:
  10688.  
  10689.  tst.b dosounds
  10690.  beq.s .notthing
  10691.  
  10692.  cmp.b #'4',Prefsfile+1
  10693.     beq fourchannel
  10694.  
  10695.  btst #1,$dff000+intreqr
  10696.     bne.s newsampbitl
  10697.  
  10698. .notthing:
  10699.  
  10700.  movem.l (a7)+,d0-d7/a0-a6
  10701.  
  10702.  moveq #0,d0
  10703.  rts
  10704.  
  10705.  
  10706. dosounds: dc.w 0
  10707.  
  10708. swappedem: dc.w 0
  10709.  
  10710. newsampbitl:
  10711.  
  10712.  move.w #$820f,$dff000+dmacon
  10713.  
  10714.  move.w #$200,$dff000+intreq
  10715.  
  10716. ; tst.b CHANNELDATA
  10717. ; bne nochannel0
  10718.  
  10719.  move.l pos0LEFT,a0
  10720.  move.l pos2LEFT,a1
  10721.  
  10722.  move.l #tab,a2
  10723.  
  10724.  moveq #0,d0
  10725.  moveq #0,d1
  10726.  move.b vol0left,d0
  10727.  move.b vol2left,d1
  10728.  cmp.b d1,d0
  10729.  slt swappedem
  10730.  bge.s fbig0
  10731.  
  10732. ; d1 is bigger so scale d0 and use d1
  10733. ; as audiochannel volume.
  10734.  
  10735.  exg a0,a1
  10736.  asl.w #6,d0
  10737.  divs d1,d0
  10738.  lsl.w #8,d0
  10739.  adda.w d0,a2
  10740.  move.w d1,$dff0a8
  10741.  bra.s donechan0
  10742.  
  10743. fbig0:
  10744.  tst.w d0
  10745.  beq.s donechan0
  10746.  asl.w #6,d1
  10747.  divs d0,d1
  10748.  lsl.w #8,d1
  10749.  adda.w d1,a2
  10750.  move.w d0,$dff0a8
  10751.  
  10752. donechan0:
  10753.  
  10754.  move.l Aupt0,a3
  10755.  move.l a3,$dff0a0
  10756.  move.l Auback0,Aupt0
  10757.  move.l a3,Auback0
  10758.  
  10759.  move.l Auback0,a3
  10760.  
  10761.  moveq #0,d0
  10762.  moveq #0,d1
  10763.  moveq #0,d2
  10764.  moveq #0,d3
  10765.  moveq #0,d4
  10766.  moveq #0,d5
  10767.  move.w #49,d7
  10768. loop:
  10769.  move.l (a0)+,d0
  10770.  move.b (a1)+,d1
  10771.  move.b (a1)+,d2
  10772.  move.b (a1)+,d3
  10773.  move.b (a1)+,d4
  10774.  move.b (a2,d3.w),d5
  10775.  swap d5
  10776.  move.b (a2,d1.w),d5
  10777.  asl.l #8,d5
  10778.  move.b (a2,d2.w),d5
  10779.  swap d5
  10780.  move.b (a2,d4.w),d5
  10781.  add.l d5,d0
  10782.  move.l d0,(a3)+
  10783.  dbra d7,loop
  10784.  
  10785.  tst.b swappedem
  10786.  beq.s .ok23
  10787.  exg a0,a1
  10788. .ok23:
  10789.  
  10790.  cmp.l Samp0endLEFT,a0
  10791.  blt.s .notoffendsamp1
  10792.  move.l #empty,a0
  10793.  move.l #emptyend,Samp0endLEFT
  10794.  move.b #0,vol0left
  10795.  st LEFTCHANDATA+1
  10796.  move.w #0,LEFTCHANDATA+2
  10797. .notoffendsamp1:
  10798.  
  10799.  cmp.l Samp2endLEFT,a1
  10800.  blt.s .notoffendsamp2
  10801.  move.l #empty,a1
  10802.  move.l #emptyend,Samp2endLEFT
  10803.  move.b #0,vol2left
  10804.  st LEFTCHANDATA+1+8
  10805.  move.w #0,LEFTCHANDATA+2+8
  10806. .notoffendsamp2:
  10807.  
  10808.  move.l a0,pos0LEFT
  10809.  move.l a1,pos2LEFT
  10810.  
  10811. nochannel0:
  10812.  
  10813.  tst.b CHANNELDATA+16
  10814.  bne nochannel1
  10815.  
  10816.  
  10817.  move.l pos0RIGHT,a0
  10818.  move.l pos2RIGHT,a1
  10819.  
  10820.  move.l Aupt1,a3
  10821.  move.l a3,$dff0b0
  10822.  move.l Auback1,Aupt1
  10823.  move.l a3,Auback1
  10824.  
  10825.  move.l #tab,a2
  10826.  
  10827.  moveq #0,d0
  10828.  moveq #0,d1
  10829.  move.b vol0right,d0
  10830.  move.b vol2right,d1
  10831.  cmp.b d1,d0
  10832.  slt swappedem
  10833.  bge.s fbig1
  10834.  
  10835. ; d1 is bigger so scale d0 and use d1
  10836. ; as audiochannel volume.
  10837.  
  10838.  exg a0,a1
  10839.  asl.w #6,d0
  10840.  divs d1,d0
  10841.  lsl.w #8,d0
  10842.  adda.w d0,a2
  10843.  move.w d1,$dff0b8
  10844.  bra.s donechan1
  10845.  
  10846. fbig1:
  10847.  tst.w d0
  10848.  beq.s donechan1
  10849.  asl.w #6,d1
  10850.  divs d0,d1
  10851.  lsl.w #8,d1
  10852.  adda.w d1,a2
  10853.  move.w d0,$dff0b8
  10854.  
  10855. donechan1:
  10856.  moveq #0,d0
  10857.  moveq #0,d1
  10858.  moveq #0,d2
  10859.  moveq #0,d3
  10860.  moveq #0,d4
  10861.  moveq #0,d5
  10862.  move.w #49,d7
  10863. loop2:
  10864.  move.l (a0)+,d0
  10865.  move.b (a1)+,d1
  10866.  move.b (a1)+,d2
  10867.  move.b (a1)+,d3
  10868.  move.b (a1)+,d4
  10869.  move.b (a2,d3.w),d5
  10870.  swap d5
  10871.  move.b (a2,d1.w),d5
  10872.  asl.l #8,d5
  10873.  move.b (a2,d2.w),d5
  10874.  swap d5
  10875.  move.b (a2,d4.w),d5
  10876.  add.l d5,d0
  10877.  move.l d0,(a3)+
  10878.  dbra d7,loop2
  10879.  
  10880.  tst.b swappedem
  10881.  beq.s ok01
  10882.  exg a0,a1
  10883. ok01:
  10884.  
  10885.  cmp.l Samp0endRIGHT,a0
  10886.  blt.s .notoffendsamp1
  10887.  move.l #empty,a0
  10888.  move.l #emptyend,Samp0endRIGHT
  10889.  move.b #0,vol0right
  10890.  st RIGHTCHANDATA+1
  10891.  move.w #0,RIGHTCHANDATA+2
  10892. .notoffendsamp1:
  10893.  
  10894.  cmp.l Samp2endRIGHT,a1
  10895.  blt.s .notoffendsamp2
  10896.  move.l #empty,a1
  10897.  move.l #emptyend,Samp2endRIGHT
  10898.  move.b #0,vol2right
  10899.  st RIGHTCHANDATA+1+8
  10900.  move.w #0,RIGHTCHANDATA+2+8
  10901. .notoffendsamp2:
  10902.  
  10903.  move.l a0,pos0RIGHT
  10904.  move.l a1,pos2RIGHT
  10905.  
  10906. nochannel1:
  10907.  
  10908. ******************* Other two channels
  10909.  
  10910.  move.l pos1LEFT,a0
  10911.  move.l pos3LEFT,a1
  10912.  
  10913.  move.l #tab,a2
  10914.  
  10915.  moveq #0,d0
  10916.  moveq #0,d1
  10917.  move.b vol1left,d0
  10918.  move.b vol3left,d1
  10919.  cmp.b d1,d0
  10920.  slt swappedem
  10921.  bge.s fbig2
  10922.  
  10923. ; d1 is bigger so scale d0 and use d1
  10924. ; as audiochannel volume.
  10925.  
  10926.  exg a0,a1
  10927.  asl.w #6,d0
  10928.  divs d1,d0
  10929.  lsl.w #8,d0
  10930.  adda.w d0,a2
  10931.  move.w d1,$dff0d8
  10932.  bra.s donechan2
  10933.  
  10934. fbig2:
  10935.  tst.w d0
  10936.  beq.s donechan2
  10937.  asl.w #6,d1
  10938.  divs d0,d1
  10939.  lsl.w #8,d1
  10940.  adda.w d1,a2
  10941.  move.w d0,$dff0d8
  10942.  
  10943. donechan2:
  10944.  
  10945.  move.l Aupt2,a3
  10946.  move.l a3,$dff0d0
  10947.  move.l Auback2,Aupt2
  10948.  move.l a3,Auback2
  10949.  
  10950.  moveq #0,d0
  10951.  moveq #0,d1
  10952.  moveq #0,d2
  10953.  moveq #0,d3
  10954.  moveq #0,d4
  10955.  moveq #0,d5
  10956.  move.w #49,d7
  10957. loop3:
  10958.  move.l (a0)+,d0
  10959.  move.b (a1)+,d1
  10960.  move.b (a1)+,d2
  10961.  move.b (a1)+,d3
  10962.  move.b (a1)+,d4
  10963.  move.b (a2,d3.w),d5
  10964.  swap d5
  10965.  move.b (a2,d1.w),d5
  10966.  asl.l #8,d5
  10967.  move.b (a2,d2.w),d5
  10968.  swap d5
  10969.  move.b (a2,d4.w),d5
  10970.  add.l d5,d0
  10971.  move.l d0,(a3)+
  10972.  dbra d7,loop3
  10973.  
  10974.  tst.b swappedem
  10975.  beq.s .ok23
  10976.  exg a0,a1
  10977. .ok23:
  10978.  
  10979.  cmp.l Samp1endLEFT,a0
  10980.  blt.s .notoffendsamp3
  10981.  move.l #empty,a0
  10982.  move.l #emptyend,Samp1endLEFT
  10983.  move.b #0,vol1left
  10984.  st LEFTCHANDATA+1+4
  10985.  move.w #0,LEFTCHANDATA+2+4
  10986. .notoffendsamp3:
  10987.  
  10988.  cmp.l Samp3endLEFT,a1
  10989.  blt.s .notoffendsamp4
  10990.  move.l #empty,a1
  10991.  move.l #emptyend,Samp3endLEFT
  10992.  move.b #0,vol3left
  10993.  st LEFTCHANDATA+1+12
  10994.  move.w #0,LEFTCHANDATA+2+12
  10995. .notoffendsamp4:
  10996.  
  10997.  move.l a0,pos1LEFT
  10998.  move.l a1,pos3LEFT
  10999.  
  11000.  move.l pos1RIGHT,a0
  11001.  move.l pos3RIGHT,a1
  11002.  
  11003.  move.l Aupt3,a3
  11004.  move.l a3,$dff0c0
  11005.  move.l Auback3,Aupt3
  11006.  move.l a3,Auback3
  11007.  
  11008.  move.l #tab,a2
  11009.  
  11010.  moveq #0,d0
  11011.  moveq #0,d1
  11012.  move.b vol1right,d0
  11013.  move.b vol3right,d1
  11014.  cmp.b d1,d0
  11015.  slt.s swappedem
  11016.  bge.s fbig3
  11017.  
  11018.  exg a0,a1
  11019.  asl.w #6,d0
  11020.  divs d1,d0
  11021.  lsl.w #8,d0
  11022.  adda.w d0,a2
  11023.  move.w d1,$dff0c8
  11024.  bra.s donechan3
  11025.  
  11026. fbig3:
  11027.  tst.w d0
  11028.  beq.s donechan3
  11029.  asl.w #6,d1
  11030.  divs d0,d1
  11031.  lsl.w #8,d1
  11032.  adda.w d1,a2
  11033.  move.w d0,$dff0c8
  11034. donechan3:
  11035.  
  11036.  moveq #0,d0
  11037.  moveq #0,d1
  11038.  moveq #0,d2
  11039.  moveq #0,d3
  11040.  moveq #0,d4
  11041.  moveq #0,d5
  11042.  move.w #49,d7
  11043. loop4:
  11044.  move.l (a0)+,d0
  11045.  move.b (a1)+,d1
  11046.  move.b (a1)+,d2
  11047.  move.b (a1)+,d3
  11048.  move.b (a1)+,d4
  11049.  move.b (a2,d3.w),d5
  11050.  swap d5
  11051.  move.b (a2,d1.w),d5
  11052.  asl.l #8,d5
  11053.  move.b (a2,d2.w),d5
  11054.  swap d5
  11055.  move.b (a2,d4.w),d5
  11056.  add.l d5,d0
  11057.  move.l d0,(a3)+
  11058.  dbra d7,loop4
  11059.  
  11060.  tst.b swappedem
  11061.  beq.s .ok23
  11062.  exg a0,a1
  11063. .ok23:
  11064.  
  11065.  cmp.l Samp1endRIGHT,a0
  11066.  blt.s notoffendsamp3
  11067.  move.l #empty,a0
  11068.  move.l #emptyend,Samp1endRIGHT
  11069.  move.b #0,vol1right
  11070.  st RIGHTCHANDATA+1+4
  11071.  move.w #0,RIGHTCHANDATA+2+4
  11072. notoffendsamp3:
  11073.  
  11074.  cmp.l Samp3endRIGHT,a1
  11075.  blt.s notoffendsamp4
  11076.  move.l #empty,a1
  11077.  move.l #emptyend,Samp3endRIGHT
  11078.  move.b #0,vol3right
  11079.  st RIGHTCHANDATA+1+12
  11080.  move.w #0,RIGHTCHANDATA+2+12
  11081. notoffendsamp4:
  11082.  
  11083.  move.l a0,pos1RIGHT
  11084.  move.l a1,pos3RIGHT
  11085.  
  11086.  movem.l (a7)+,d0-d7/a0-a6
  11087.  tst.b counting
  11088.  beq .nostartcounter
  11089.  JSR STARTCOUNT
  11090. .nostartcounter:
  11091.  
  11092.  moveq #0,d0
  11093.  rts
  11094.  
  11095. ***********************************
  11096. * 4 channel sound routine
  11097. ***********************************
  11098.  
  11099. fourchannel:
  11100.  
  11101.  move.l #$dff000,a6
  11102.  
  11103.  btst #7,intreqrl(a6)
  11104.  beq.s nofinish0
  11105. ; move.w #0,LEFTCHANDATA+2
  11106. ; st LEFTCHANDATA+1
  11107.  move.l #null,$a0(a6)
  11108.  move.w #100,$a4(a6) 
  11109.  move.w #$0080,intreq(a6)
  11110. nofinish0:
  11111.  
  11112.  tst.b NoiseMade0pLEFT
  11113.  beq.s NoChan0sound
  11114.  
  11115.  move.l Samp0endLEFT,d0
  11116.  move.l pos0LEFT,d1
  11117.  sub.l d1,d0
  11118.  lsr.l #1,d0
  11119.  move.w d0,$a4(a6)
  11120.  move.l d1,$a0(a6)
  11121.  ext.l d0
  11122.  divs #100,d0
  11123.  move.w d0,playnull0
  11124.  move.w #$8201,dmacon(a6)
  11125.  moveq #0,d0
  11126.  move.b vol0left,d0
  11127.  move.w d0,$a8(a6)
  11128.  
  11129. NoChan0sound:
  11130.  
  11131. *****************************************
  11132. *****************************************
  11133.  
  11134.  btst #0,intreqr(a6)
  11135.  beq.s nofinish1
  11136.  move.l #null,$b0(a6)
  11137.  move.w #100,$b4(a6)
  11138.  move.w #$0100,intreq(a6)
  11139. nofinish1:
  11140.  
  11141.  tst.b NoiseMade0pRIGHT
  11142.  beq.s NoChan1sound
  11143.  
  11144.  move.l Samp0endRIGHT,d0
  11145.  move.l pos0RIGHT,d1
  11146.  sub.l d1,d0
  11147.  lsr.l #1,d0
  11148.  move.w d0,$b4(a6)
  11149.  move.l d1,$b0(a6)
  11150.  ext.l d0
  11151.  divs #100,d0
  11152.  move.w d0,playnull1
  11153.  move.w #$8202,dmacon(a6)
  11154.  moveq #0,d0
  11155.  move.b vol0right,d0
  11156.  move.w d0,$b8(a6)
  11157.  
  11158. NoChan1sound:
  11159.  
  11160. *****************************************
  11161. *****************************************
  11162.  
  11163.  btst #1,intreqr(a6)
  11164.  beq.s nofinish2
  11165.  move.l #null,$c0(a6)
  11166.  move.w #100,$c4(a6)
  11167.  move.w #$0200,intreq(a6)
  11168. nofinish2:
  11169.  
  11170.  tst.b NoiseMade1pRIGHT
  11171.  beq.s NoChan2sound
  11172.  
  11173.  move.l Samp1endRIGHT,d0
  11174.  move.l pos1RIGHT,d1
  11175.  sub.l d1,d0
  11176.  lsr.l #1,d0
  11177.  move.w d0,$c4(a6)
  11178.  ext.l d0
  11179.  divs #100,d0
  11180.  move.w d0,playnull2
  11181.  
  11182.  move.l d1,$c0(a6)
  11183.  move.w #$8204,dmacon(a6)
  11184.  moveq #0,d0
  11185.  move.b vol1right,d0
  11186.  move.w d0,$c8(a6)
  11187.  
  11188. NoChan2sound:
  11189.  
  11190. *****************************************
  11191. *****************************************
  11192.  
  11193.  btst #2,intreqr(a6)
  11194.  beq.s nofinish3
  11195.  move.l #null,$d0(a6)
  11196.  move.w #100,$d4(a6)
  11197.  move.w #$0400,intreq(a6)
  11198. nofinish3:
  11199.  
  11200.  tst.b NoiseMade1pLEFT
  11201.  beq.s NoChan3sound
  11202.  
  11203.  move.l Samp1endLEFT,d0
  11204.  move.l pos1LEFT,d1
  11205.  sub.l d1,d0
  11206.  lsr.l #1,d0
  11207.  move.w d0,$d4(a6)
  11208.  ext.l d0
  11209.  divs #100,d0
  11210.  move.w d0,playnull3
  11211.  move.l d1,$d0(a6)
  11212.  move.w #$8208,dmacon(a6)
  11213.  moveq #0,d0
  11214.  move.b vol1left,d0
  11215.  move.w d0,$d8(a6)
  11216.  
  11217. NoChan3sound:
  11218.  
  11219. nomorechannels:
  11220.  
  11221.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  11222.  move.l #0,NoiseMade0LEFT
  11223.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  11224.  move.l #0,NoiseMade0RIGHT
  11225.  
  11226. ; tst.b playnull0
  11227. ; beq.s .nnul
  11228. ; sub.b #1,playnull0
  11229. ; bra.s chan0still
  11230. ;.nnul:
  11231. ;chan0still:
  11232.  
  11233.  tst.b NoiseMade0pLEFT
  11234.  bne.s chan0still
  11235.  tst.w playnull0
  11236.  beq.s nnul0
  11237.  sub.w #1,playnull0
  11238.  bra.s chan0still
  11239. nnul0:
  11240.  move.w #0,LEFTCHANDATA+2
  11241.  st LEFTCHANDATA+1
  11242. chan0still:
  11243.  
  11244.  tst.b NoiseMade0pRIGHT
  11245.  bne.s chan1still    ;it'll never work
  11246.  tst.w playnull1
  11247.  beq.s nnul1
  11248.  sub.w #1,playnull1
  11249.  bra.s chan1still
  11250. nnul1:
  11251.  move.w #0,RIGHTCHANDATA+2
  11252.  st RIGHTCHANDATA+1
  11253. chan1still:
  11254.  
  11255.  tst.b NoiseMade1pRIGHT
  11256.  bne.s chan2still
  11257.  tst.w playnull2
  11258.  beq.s nnul2
  11259.  sub.w #1,playnull2
  11260.  bra.s chan2still
  11261. nnul2:
  11262.  move.w #0,RIGHTCHANDATA+2+4
  11263.  st RIGHTCHANDATA+1+4
  11264. chan2still:
  11265.  
  11266.  tst.b NoiseMade1pLEFT
  11267.  bne.s chan3still
  11268.  tst.w playnull3
  11269.  beq.s nnul3
  11270.  sub.w #1,playnull3
  11271.  bra.s chan3still
  11272. nnul3:
  11273.  move.w #0,LEFTCHANDATA+2+4
  11274.  st LEFTCHANDATA+1+4
  11275.  
  11276. chan3still:
  11277.  
  11278.  
  11279.  movem.l (a7)+,d0-d7/a0-a6
  11280.  
  11281.  moveq #0,d0
  11282.  rts
  11283.  
  11284. backbeat: dc.w 0
  11285.  
  11286. playnull0: dc.w 0
  11287. playnull1: dc.w 0
  11288. playnull2: dc.w 0
  11289. playnull3: dc.w 0
  11290.  
  11291. Samp0endRIGHT: dc.l emptyend
  11292. Samp1endRIGHT: dc.l emptyend
  11293. Samp2endRIGHT: dc.l emptyend
  11294. Samp3endRIGHT: dc.l emptyend
  11295. Samp0endLEFT: dc.l emptyend
  11296. Samp1endLEFT: dc.l emptyend
  11297. Samp2endLEFT: dc.l emptyend
  11298. Samp3endLEFT: dc.l emptyend
  11299.  
  11300. Aupt0: dc.l null
  11301. Auback0: dc.l null+500
  11302. Aupt2: dc.l null3
  11303. Auback2: dc.l null3+500
  11304. Aupt3: dc.l null4
  11305. Auback3: dc.l null4+500
  11306. Aupt1: dc.l null2
  11307. Auback1: dc.l null2+500
  11308.  
  11309. NoiseMade0LEFT: dc.b 0
  11310. NoiseMade1LEFT: dc.b 0
  11311. NoiseMade2LEFT: dc.b 0
  11312. NoiseMade3LEFT: dc.b 0
  11313. NoiseMade0pLEFT: dc.b 0
  11314. NoiseMade1pLEFT: dc.b 0
  11315. NoiseMade2pLEFT: dc.b 0
  11316. NoiseMade3pLEFT: dc.b 0
  11317. NoiseMade0RIGHT: dc.b 0
  11318. NoiseMade1RIGHT: dc.b 0
  11319. NoiseMade2RIGHT: dc.b 0
  11320. NoiseMade3RIGHT: dc.b 0
  11321. NoiseMade0pRIGHT: dc.b 0
  11322. NoiseMade1pRIGHT: dc.b 0
  11323. NoiseMade2pRIGHT: dc.b 0
  11324. NoiseMade3pRIGHT: dc.b 0
  11325.  
  11326. empty: ds.l 100
  11327. emptyend:
  11328.  
  11329. **************************************
  11330. * I want a routine to calculate all the
  11331. * info needed for the sound player to
  11332. * work, given say position of noise, volume
  11333. * and sample number.
  11334.  
  11335. Samplenum: dc.w 0
  11336. Noisex: dc.w 0
  11337. Noisez: dc.w 0
  11338. Noisevol: dc.w 0
  11339. chanpick: dc.w 0
  11340. IDNUM: dc.w 0
  11341. needleft: dc.b 0
  11342. needright: dc.b 0
  11343. STEREO: dc.b $0
  11344. even
  11345. prot6: dc.w 0
  11346.  
  11347.  even
  11348.  
  11349. CHANNELDATA:
  11350. LEFTCHANDATA:
  11351.  dc.l $00000000
  11352.  dc.l $00000000
  11353.  dc.l $FF000000
  11354.  dc.l $FF000000
  11355. RIGHTCHANDATA:
  11356.  dc.l $00000000
  11357.  dc.l $00000000
  11358.  dc.l $FF000000
  11359.  dc.l $FF000000
  11360.  
  11361. RIGHTPLAYEDTAB: ds.l 20
  11362. LEFTPLAYEDTAB: ds.l 20
  11363.  
  11364. MakeSomeNoise:
  11365.  
  11366. ; Plan for new sound handler:
  11367. ; It is sent a sample number,
  11368. ; a position relative to the
  11369. ; player, an id number and a volume.
  11370. ; Also notifplaying.
  11371.  
  11372. ; indirect inputs are the available
  11373. ; channel flags and whether or not
  11374. ; stereo sound is selected.
  11375.  
  11376. ; the algorithm must decide
  11377. ; whether the new sound is more
  11378. ; important than the ones already
  11379. ; playing. Thus an 'importance'
  11380. ; must be calculated, probably
  11381. ; using volume.
  11382.  
  11383. ; The output needs to be:
  11384.  
  11385. ; Write the pointers and volumes of
  11386. ; the sound channels
  11387.  
  11388.  
  11389.  tst.b notifplaying
  11390.  beq.s dontworry
  11391.  
  11392. ; find if we are already playing
  11393.  
  11394.  move.b IDNUM,d0
  11395.  move.w #7,d1
  11396.  lea CHANNELDATA,a3
  11397. findsameasme
  11398.  tst.b (a3)
  11399.  bne.s notavail
  11400.  cmp.b 1(a3),d0
  11401.  beq SameAsMe
  11402. notavail:
  11403.  add.w #4,a3
  11404.  dbra d1,findsameasme
  11405.  bra dontworry
  11406. SameAsMe
  11407.  rts
  11408.  
  11409. noiseloud: dc.w 0
  11410.  
  11411. dontworry:
  11412.  
  11413. ; Ok its fine for us to play a sound.
  11414. ; So calculate left/right volume.
  11415.  
  11416.  move.w Noisex,d1
  11417.  muls d1,d1
  11418.  move.w Noisez,d2
  11419.  muls d2,d2
  11420.  move.w #64,d3
  11421.  move.w #32767,noiseloud
  11422.  moveq #1,d0
  11423.  add.l d1,d2
  11424.  beq pastcalc
  11425.  
  11426.  move.w #31,d0
  11427. .findhigh
  11428.  btst d0,d2
  11429.  bne .foundhigh
  11430.  dbra d0,.findhigh
  11431. .foundhigh
  11432.  asr.w #1,d0
  11433.  clr.l d3
  11434.  bset d0,d3
  11435.  move.l d3,d0
  11436.  
  11437.  move.w d0,d3
  11438.  muls d3,d3    ; x*x
  11439.  sub.l d2,d3    ; x*x-a
  11440.  asr.l #1,d3    ; (x*x-a)/2
  11441.  divs d0,d3    ; (x*x-a)/2x
  11442.  sub.w d3,d0    ; second approx
  11443.  bgt .stillnot0
  11444.  move.w #1,d0
  11445. .stillnot0
  11446.  
  11447.  move.w d0,d3
  11448.  muls d3,d3
  11449.  sub.l d2,d3
  11450.  asr.l #1,d3
  11451.  divs d0,d3
  11452.  sub.w d3,d0    ; second approx
  11453.  bgt .stillnot02
  11454.  move.w #1,d0
  11455. .stillnot02
  11456.  
  11457.  move.w Noisevol,d3
  11458.  ext.l d3
  11459.  asl.l #6,d3
  11460.  cmp.l #32767,d3
  11461.  ble.s .nnnn
  11462.  move.l #32767,d3
  11463. .nnnn
  11464.  
  11465.  asr.w #2,d0
  11466.  addq #1,d0
  11467.  divs d0,d3
  11468.  
  11469.  move.w d3,noiseloud
  11470.  
  11471.  cmp.w #64,d3
  11472.  ble.s notooloud
  11473.  move.w #64,d3
  11474. notooloud:
  11475.  
  11476. pastcalc:
  11477.  
  11478.     ; d3 contains volume of noise.
  11479.     
  11480.  move.w d3,d4
  11481.  tst.b STEREO
  11482.  beq NOSTEREO
  11483.  
  11484.  move.w d3,d2
  11485.  muls Noisex,d2
  11486.  asl.w #2,d0
  11487.  divs d0,d2
  11488.  
  11489.  bgt.s quietleft
  11490.  add.w d2,d4
  11491.  bge.s donequiet
  11492.  move.w #0,d4
  11493.  bra.s donequiet
  11494. quietleft:
  11495.  sub.w d2,d3
  11496.  bge.s donequiet
  11497.  move.w #0,d3
  11498. donequiet:
  11499.  
  11500. ; d3=leftvol?
  11501. ; d4=rightvol?
  11502.  
  11503.  clr.w needleft
  11504.  
  11505.  cmp.b d3,d4
  11506.  bgt.s RightLouder
  11507.  
  11508. ; Left is louder; is it MUCH louder?
  11509.  
  11510.  st needleft
  11511.  move.w d3,d2
  11512.  sub.w d4,d2
  11513.  cmp.w #32,d2
  11514.  slt needright
  11515.  bra aboutsame
  11516.  
  11517. RightLouder:
  11518.  st needright
  11519.  move.w d4,d2
  11520.  sub.w d3,d2
  11521.  cmp.w #32,d2
  11522.  slt needleft
  11523.  
  11524. aboutsame:
  11525.  
  11526.  
  11527. ; Find least important sound on left
  11528.  
  11529.  move.l #0,a2
  11530.  move.l #0,d5
  11531.  move.w #32767,d2
  11532.  move.b IDNUM,d0
  11533.  lea LEFTCHANDATA,a3
  11534.  move.w #3,d1
  11535. FindLeftChannel
  11536.  tst.b (a3)
  11537.  bne.s .notactive
  11538.  cmp.b 1(a3),d0
  11539.  beq.s FOUNDLEFT
  11540.  cmp.w 2(a3),d2
  11541.  blt.s .notactive
  11542.  move.w 2(a3),d2
  11543.  move.l a3,a2
  11544.  move.w d5,d6
  11545.  
  11546. .notactive:
  11547.  add.w #4,a3
  11548.  add.w #1,d5
  11549.  dbra d1,FindLeftChannel
  11550.  move.l a2,a3
  11551.  bra.s gopastleft
  11552. FOUNDLEFT:
  11553.  move.w d5,d6
  11554. gopastleft:
  11555.  tst.l a3
  11556.  bne.s FOUNDALEFT
  11557. NONOISE:
  11558.  rts
  11559. FOUNDALEFT:
  11560.  
  11561.  cmp.w noiseloud,d3
  11562.  bge.s NONOISE
  11563.  
  11564. ; d6 = channel number
  11565.  move.b d0,1(a3)
  11566.  move.w d3,2(a3)
  11567.  
  11568.  move.w Samplenum,d5
  11569.  move.l #SampleList,a3
  11570.  move.l (a3,d5.w*8),a1
  11571.  move.l 4(a3,d5.w*8),a2
  11572.  
  11573.  tst.b d6
  11574.  seq NoiseMade0LEFT
  11575.  beq.s .chan0
  11576.  cmp.b #2,d6
  11577.  slt NoiseMade1LEFT
  11578.  blt .chan1
  11579.  seq NoiseMade2LEFT
  11580.  beq .chan2
  11581.  st NoiseMade3LEFT
  11582.  
  11583.  move.b d5,LEFTPLAYEDTAB+9
  11584.  move.b d3,LEFTPLAYEDTAB+1+9
  11585.  move.b d4,LEFTPLAYEDTAB+2+9
  11586.  move.b d3,vol3left
  11587.  move.l a1,pos3LEFT
  11588.  move.l a2,Samp3endLEFT
  11589.  bra dorightchan
  11590.  
  11591. .chan0: 
  11592.  move.b d5,LEFTPLAYEDTAB
  11593.  move.b d3,LEFTPLAYEDTAB+1
  11594.  move.b d4,LEFTPLAYEDTAB+2
  11595.  move.l a1,pos0LEFT
  11596.  move.l a2,Samp0endLEFT
  11597.  move.b d3,vol0left
  11598.  bra dorightchan
  11599.  
  11600. .chan1:
  11601.  move.b d5,LEFTPLAYEDTAB+3
  11602.  move.b d3,LEFTPLAYEDTAB+1+3
  11603.  move.b d4,LEFTPLAYEDTAB+2+3
  11604.  move.b d3,vol1left
  11605.  move.l a1,pos1LEFT
  11606.  move.l a2,Samp1endLEFT
  11607.  bra dorightchan
  11608.  
  11609. .chan2: 
  11610.  move.b d5,LEFTPLAYEDTAB+6
  11611.  move.b d3,LEFTPLAYEDTAB+1+6
  11612.  move.b d4,LEFTPLAYEDTAB+2+6
  11613.  move.l a1,pos2LEFT
  11614.  move.l a2,Samp2endLEFT
  11615.  move.b d3,vol2left
  11616.  
  11617. dorightchan:
  11618.  
  11619. ; Find least important sound on right
  11620.  
  11621.  move.l #0,a2
  11622.  move.l #0,d5
  11623.  move.w #10000,d2
  11624.  move.b IDNUM,d0
  11625.  lea RIGHTCHANDATA,a3
  11626.  move.w #3,d1
  11627. FindRightChannel
  11628.  tst.b (a3)
  11629.  bne.s .notactive
  11630.  cmp.b 1(a3),d0
  11631.  beq.s FOUNDRIGHT
  11632.  cmp.w 2(a3),d2
  11633.  blt.s .notactive
  11634.  move.w 2(a3),d2
  11635.  move.l a3,a2
  11636.  move.w d5,d6
  11637.  
  11638. .notactive:
  11639.  add.w #4,a3
  11640.  add.w #1,d5
  11641.  dbra d1,FindRightChannel
  11642.  move.l a2,a3
  11643.  bra.s gopastright
  11644. FOUNDRIGHT:
  11645.  move.w d5,d6
  11646. gopastright:
  11647.  tst.l a3
  11648.  bne.s FOUNDARIGHT
  11649.  rts
  11650. FOUNDARIGHT:
  11651.  
  11652. ; d6 = channel number
  11653.  move.b d0,1(a3)
  11654.  move.w d3,2(a3)
  11655.  
  11656.  move.w Samplenum,d5
  11657.  move.l #SampleList,a3
  11658.  move.l (a3,d5.w*8),a1
  11659.  move.l 4(a3,d5.w*8),a2
  11660.  
  11661.  tst.b d6
  11662.  seq NoiseMade0RIGHT
  11663.  beq.s .chan0
  11664.  cmp.b #2,d6
  11665.  slt NoiseMade1RIGHT
  11666.  blt .chan1
  11667.  seq NoiseMade2RIGHT
  11668.  beq .chan2
  11669.  st NoiseMade3RIGHT
  11670.  
  11671.  move.b d5,RIGHTPLAYEDTAB+9
  11672.  move.b d3,RIGHTPLAYEDTAB+1+9
  11673.  move.b d4,RIGHTPLAYEDTAB+2+9
  11674.  move.b d4,vol3right
  11675.  move.l a1,pos3RIGHT
  11676.  move.l a2,Samp3endRIGHT
  11677.  rts
  11678.  
  11679. .chan0: 
  11680.  move.b d5,RIGHTPLAYEDTAB
  11681.  move.b d3,RIGHTPLAYEDTAB+1
  11682.  move.b d4,RIGHTPLAYEDTAB+2
  11683.  move.l a1,pos0RIGHT
  11684.  move.l a2,Samp0endRIGHT
  11685.  move.b d4,vol0right
  11686.  rts
  11687.  
  11688. .chan1:
  11689.  move.b d5,RIGHTPLAYEDTAB+3
  11690.  move.b d3,RIGHTPLAYEDTAB+1+3
  11691.  move.b d4,RIGHTPLAYEDTAB+2+3
  11692.  move.b d3,vol1right
  11693.  move.l a1,pos1RIGHT
  11694.  move.l a2,Samp1endRIGHT
  11695.  rts
  11696.  
  11697. .chan2: 
  11698.  move.b d5,RIGHTPLAYEDTAB+6
  11699.  move.b d3,RIGHTPLAYEDTAB+1+6
  11700.  move.b d4,RIGHTPLAYEDTAB+2+6
  11701.  move.l a1,pos2RIGHT
  11702.  move.l a2,Samp2endRIGHT
  11703.  move.b d3,vol2right
  11704.  rts
  11705.  
  11706. NOSTEREO:
  11707.  move.l #0,a2
  11708.  move.l #-1,d5
  11709.  move.w #32767,d2
  11710.  move.b IDNUM,d0
  11711.  lea CHANNELDATA,a3
  11712.  move.w #7,d1
  11713. FindChannel
  11714.  tst.b (a3)
  11715.  bne.s .notactive
  11716.  cmp.b 1(a3),d0
  11717.  beq.s FOUNDMYCHAN
  11718.  cmp.w 2(a3),d2
  11719.  blt.s .notactive
  11720.  move.w 2(a3),d2
  11721.  move.l a3,a2
  11722.  move.w d5,d6
  11723.  add.w #1,d6
  11724.  
  11725. .notactive:
  11726.  add.w #4,a3
  11727.  add.w #1,d5
  11728.  dbra d1,FindChannel
  11729.  
  11730.  move.l a2,a3
  11731.  bra.s gopastchan
  11732.  
  11733. FOUNDMYCHAN:
  11734.  move.w 2(a3),d2
  11735.  
  11736. FOUNDCHAN:
  11737.  move.w d5,d6
  11738.  add.w #1,d6
  11739. gopastchan:
  11740.  tst.w d6
  11741.  bge.s FOUNDACHAN
  11742. tooquiet:
  11743.  rts
  11744. FOUNDACHAN:
  11745.  
  11746. ; d6 = channel number
  11747.  
  11748.  cmp.w noiseloud,d2
  11749.  bgt.s tooquiet
  11750.  
  11751.  move.b d0,1(a3)
  11752.  move.w noiseloud,2(a3)
  11753.  
  11754.  move.w Samplenum,d5
  11755.  move.l #SampleList,a3
  11756.  move.l (a3,d5.w*8),a1
  11757.  move.l 4(a3,d5.w*8),a2
  11758.  
  11759.  tst.b d6
  11760.  beq .chan0
  11761.  cmp.b #2,d6
  11762.  blt .chan1
  11763.  beq .chan2
  11764.  cmp.b #4,d6
  11765.  blt .chan3
  11766.  beq .chan4
  11767.  cmp.b #6,d6
  11768.  blt .chan5
  11769.  beq .chan6
  11770.  st NoiseMade3RIGHT
  11771.  
  11772.  move.b d5,RIGHTPLAYEDTAB+9
  11773.  move.b d3,RIGHTPLAYEDTAB+1+9
  11774.  move.b d4,RIGHTPLAYEDTAB+2+9
  11775.  move.b d4,vol3right
  11776.  move.l a1,pos3RIGHT
  11777.  move.l a2,Samp3endRIGHT
  11778.  rts
  11779.  
  11780. .chan3:
  11781.  st NoiseMade3LEFT
  11782.  move.b d5,LEFTPLAYEDTAB+9
  11783.  move.b d3,LEFTPLAYEDTAB+1+9
  11784.  move.b d4,LEFTPLAYEDTAB+2+9
  11785.  move.b d3,vol3left
  11786.  move.l a1,pos3LEFT
  11787.  move.l a2,Samp3endLEFT
  11788.  bra dorightchan
  11789.  
  11790. .chan0: 
  11791.  st NoiseMade0LEFT
  11792.  move.b d5,LEFTPLAYEDTAB
  11793.  move.b d3,LEFTPLAYEDTAB+1
  11794.  move.b d4,LEFTPLAYEDTAB+2
  11795.  move.l a1,pos0LEFT
  11796.  move.l a2,Samp0endLEFT
  11797.  move.b d3,vol0left
  11798.  rts
  11799.  
  11800. .chan1:
  11801.  st NoiseMade1LEFT
  11802.  move.b d5,LEFTPLAYEDTAB+3
  11803.  move.b d3,LEFTPLAYEDTAB+1+3
  11804.  move.b d4,LEFTPLAYEDTAB+2+3
  11805.  move.b d3,vol1left
  11806.  move.l a1,pos1LEFT
  11807.  move.l a2,Samp1endLEFT
  11808.  rts
  11809.  
  11810. .chan2: 
  11811.  st NoiseMade2LEFT
  11812.  move.b d5,LEFTPLAYEDTAB+6
  11813.  move.b d3,LEFTPLAYEDTAB+1+6
  11814.  move.b d4,LEFTPLAYEDTAB+2+6
  11815.  move.l a1,pos2LEFT
  11816.  move.l a2,Samp2endLEFT
  11817.  move.b d3,vol2left
  11818.  rts
  11819.  
  11820. .chan4: 
  11821.  st NoiseMade0RIGHT
  11822.  move.b d5,RIGHTPLAYEDTAB
  11823.  move.b d3,RIGHTPLAYEDTAB+1
  11824.  move.b d4,RIGHTPLAYEDTAB+2
  11825.  move.l a1,pos0RIGHT
  11826.  move.l a2,Samp0endRIGHT
  11827.  move.b d4,vol0right
  11828.  rts
  11829.  
  11830. .chan5:
  11831.  st NoiseMade1RIGHT
  11832.  move.b d5,RIGHTPLAYEDTAB+3
  11833.  move.b d3,RIGHTPLAYEDTAB+1+3
  11834.  move.b d4,RIGHTPLAYEDTAB+2+3
  11835.  move.b d3,vol1right
  11836.  move.l a1,pos1RIGHT
  11837.  move.l a2,Samp1endRIGHT
  11838.  rts
  11839.  
  11840. .chan6: 
  11841.  st NoiseMade2RIGHT
  11842.  move.b d5,RIGHTPLAYEDTAB+6
  11843.  move.b d3,RIGHTPLAYEDTAB+1+6
  11844.  move.b d4,RIGHTPLAYEDTAB+2+6
  11845.  move.l a1,pos2RIGHT
  11846.  move.l a2,Samp2endRIGHT
  11847.  move.b d3,vol2right
  11848.  rts
  11849.  
  11850. SampleList:
  11851.  dc.l Scream,EndScream
  11852.  dc.l Shoot,EndShoot
  11853.  dc.l Munch,EndMunch
  11854.  dc.l PooGun,EndPooGun
  11855.  dc.l Collect,EndCollect
  11856. ;5
  11857.  dc.l DoorNoise,EndDoorNoise
  11858.  dc.l 0,0
  11859.  dc.l Stomp,EndStomp
  11860.  dc.l LowScream,EndLowScream
  11861.  dc.l BaddieGun,EndBaddieGun
  11862. ;10
  11863.  dc.l SwitchNoise,EndSwitch
  11864.  dc.l Reload,EndReload
  11865.  dc.l NoAmmo,EndNoAmmo
  11866.  dc.l Splotch,EndSplotch
  11867.  dc.l SplatPop,EndSplatPop
  11868. ;15
  11869.  dc.l Boom,EndBoom
  11870.  dc.l Hiss,EndHiss
  11871.  dc.l Howl1,EndHowl1
  11872.  dc.l Howl2,EndHowl2
  11873.  dc.l Pant,EndPant
  11874. ;20
  11875.  dc.l Whoosh,EndWhoosh
  11876.  dc.l ROAR,EndROAR
  11877.  dc.l whoosh,Endwhoosh
  11878.  dc.l 0,0
  11879.  dc.l 0,0
  11880.  dc.l 0,0
  11881.  dc.l 0,0
  11882.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11883.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11884.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11885.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11886.  
  11887.  dc.l 0
  11888.  
  11889. storeval: dc.w 0
  11890.  
  11891.  include "ab3:source_4000/wallchunk.s"
  11892.  include "ab3:source_4000/newloadfromdisk.s"
  11893.  include "ab3:source_4000/screensetup.s"
  11894.  include "ab3:source_4000/CONTROLLOOP.s"
  11895.  
  11896.  
  11897.  
  11898.  
  11899. saveinters:  
  11900.  dc.w 0
  11901.  
  11902. z: dc.w 10
  11903.  
  11904. notifplaying:
  11905.  dc.w 0
  11906.  
  11907. audpos1: dc.w 0
  11908. audpos1b: dc.w 0
  11909. audpos2: dc.w 0
  11910. audpos2b: dc.w 0
  11911. audpos3: dc.w 0
  11912. audpos3b: dc.w 0
  11913. audpos4: dc.w 0
  11914. audpos4b: dc.w 0
  11915.  
  11916. vol0left: dc.w 0
  11917. vol0right: dc.w 0
  11918. vol1left: dc.w 0
  11919. vol1right: dc.w 0
  11920. vol2left: dc.w 0
  11921. vol2right: dc.w 0
  11922. vol3left: dc.w 0
  11923. vol3right: dc.w 0
  11924.  
  11925. pos: dc.l 0
  11926.  
  11927. pos0LEFT: dc.l empty
  11928. pos1LEFT: dc.l empty
  11929. pos2LEFT: dc.l empty
  11930. pos3LEFT: dc.l empty
  11931. pos0RIGHT: dc.l empty
  11932. pos1RIGHT: dc.l empty
  11933. pos2RIGHT: dc.l empty
  11934. pos3RIGHT: dc.l empty
  11935.  
  11936. numtodo dc.w 0
  11937.  
  11938. npt: dc.w 0
  11939.  
  11940. pretab:
  11941. val SET 0
  11942.  REPT 128
  11943.  dc.b val
  11944. val SET val+1
  11945.  ENDR
  11946. val SET -128
  11947.  REPT 128
  11948.  dc.b val
  11949. val SET val+1
  11950.  ENDR 
  11951.  
  11952. tab:
  11953.  ifeq CHEESEY
  11954.  ds.b 256*65
  11955.  endc
  11956.  
  11957. test: dc.l 0
  11958.  ds.l 30
  11959.  
  11960.  
  11961.  even
  11962. ConstCols:
  11963. ; incbin "ConstCols"
  11964.  even
  11965. Smoothscalecols:
  11966. ; incbin "smoothbumppalscaled"
  11967.  even
  11968. SmoothTile:
  11969. ; incbin "smoothbumptile"
  11970.  even
  11971. Bumpscalecols:
  11972. ; incbin "Bumppalscaled"
  11973.  even
  11974. Bumptile:
  11975. ; incbin "bumptile"
  11976.  even
  11977. scalecols: ;incbin "bytepixpalscaled"
  11978.  even
  11979. ;floorscalecols:
  11980. ; incbin "floor256pal"
  11981. ; ds.w 256*4
  11982.  
  11983.  even
  11984. PaletteAddr: dc.l 0
  11985. ChunkAddr: dc.l 0
  11986. ;walltiles:
  11987. ; dc.l GreenMechanicWALL
  11988. ; dc.l BlueGreyMetalWALL
  11989. ; dc.l TechnoDetailWALL
  11990. ; dc.l BlueStoneWALL
  11991. ; dc.l RedAlertWALL
  11992. ; dc.l RockWALL
  11993. ;
  11994. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  11995. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  11996. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  11997. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  11998. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  11999. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  12000.  
  12001. floortile:
  12002.  dc.l 0
  12003. ; incbin "floortile" 
  12004.  even
  12005. wallrouts:
  12006. ; incbin "2x2WallDraw" 
  12007.  CNOP 0,64
  12008.  
  12009.  ifeq CHEESEY 
  12010. BackPicture:
  12011.  incbin "rawback"
  12012. EndBackPicture:
  12013.  endc
  12014.  
  12015. drawpt: dc.l 0
  12016. olddrawpt: dc.l 0
  12017. frompt: dc.l 0 
  12018.  
  12019. SineTable:
  12020.  incbin "bigsine"
  12021.  
  12022. angspd: dc.w 0
  12023. flooryoff: dc.w 0
  12024. xoff: dc.l 0
  12025. yoff: dc.l 0
  12026. yvel: dc.l 0
  12027. zoff: dc.l 0
  12028. tyoff: dc.l 0
  12029. xspdval: dc.l 0
  12030. zspdval: dc.l 0
  12031. Zone: dc.w 0
  12032.  
  12033. PLR1: dc.b $ff
  12034.  even
  12035. PLR1_energy: dc.w 191
  12036. PLR1_GunSelected: dc.w 0
  12037. PLR1_cosval: dc.w 0
  12038. PLR1_sinval: dc.w 0
  12039. PLR1_angpos: dc.w 0
  12040. PLR1_angspd: dc.w 0
  12041. PLR1_xoff: dc.l 0
  12042. PLR1_yoff: dc.l 0
  12043. PLR1_yvel: dc.l 0
  12044. PLR1_zoff: dc.l 0
  12045. PLR1_tyoff: dc.l 0
  12046. PLR1_xspdval: dc.l 0
  12047. PLR1_zspdval: dc.l 0
  12048. PLR1_Zone: dc.w 0
  12049. PLR1_Roompt: dc.l 0
  12050. PLR1_FloorSpd: dc.l 0
  12051. PLR2_FloorSpd: dc.l 0
  12052. PLR1_OldRoompt: dc.l 0
  12053. PLR1_PointsToRotatePtr: dc.l 0
  12054. PLR1_ListOfGraphRooms: dc.l 0
  12055. PLR1_oldxoff: dc.l 0
  12056. PLR1_oldzoff: dc.l 0
  12057. PLR1_StoodInTop: dc.b 0
  12058.  even
  12059. PLR1_height: dc.l 0
  12060. PLR1_RoomBright: dc.w 0
  12061.  
  12062. DOUBLEWIDTH: dc.b $0,0
  12063. DOUBLEHEIGHT: dc.b 0,0
  12064. PLR1_TELEPORTED: dc.w 0
  12065. PLR2_TELEPORTED: dc.w 0
  12066.  
  12067.  ds.w 4
  12068.  
  12069. OLDX1: dc.l 0
  12070. OLDX2: dc.l 0
  12071. OLDZ1: dc.l 0
  12072. OLDZ2: dc.l 0
  12073.  
  12074. XDIFF1: dc.l 0
  12075. ZDIFF1: dc.l 0
  12076. XDIFF2: dc.l 0
  12077. ZDIFF2: dc.l 0
  12078.  
  12079. PLR1s_cosval: dc.w 0
  12080. PLR1s_sinval: dc.w 0
  12081. PLR1s_angpos: dc.w 0
  12082. PLR1s_angspd: dc.w 0
  12083. PLR1s_xoff: dc.l 0
  12084. PLR1s_yoff: dc.l 0
  12085. PLR1s_yvel: dc.l 0
  12086. PLR1s_zoff: dc.l 0
  12087. PLR1s_tyoff: dc.l 0
  12088. PLR1s_xspdval: dc.l 0
  12089. PLR1s_zspdval: dc.l 0
  12090. PLR1s_Zone: dc.w 0
  12091. PLR1s_Roompt: dc.l 0
  12092. PLR1s_OldRoompt: dc.l 0
  12093. PLR1s_PointsToRotatePtr: dc.l 0
  12094. PLR1s_ListOfGraphRooms: dc.l 0
  12095. PLR1s_oldxoff: dc.l 0
  12096. PLR1s_oldzoff: dc.l 0
  12097. PLR1s_height: dc.l 0
  12098. PLR1s_targheight: dc.l 0
  12099.  
  12100. p1_xoff: dc.l 0
  12101. p1_zoff: dc.l 0
  12102. p1_yoff: dc.l 0
  12103. p1_height: dc.l 0
  12104. p1_angpos: dc.w 0
  12105. p1_bobble: dc.w 0
  12106. p1_clicked: dc.b 0
  12107. p1_spctap: dc.b 0
  12108. p1_ducked: dc.b 0
  12109. p1_gunselected: dc.b 0
  12110. p1_fire: dc.b 0
  12111.  even
  12112. p1_holddown: dc.w 0
  12113.  
  12114.  ds.w 4
  12115.  
  12116. PLR2: dc.b $ff
  12117.  even
  12118. PLR2_GunSelected: dc.w 0
  12119. PLR2_energy: dc.w 191
  12120. PLR2_cosval: dc.w 0
  12121. PLR2_sinval: dc.w 0
  12122. PLR2_angpos: dc.w 0
  12123. PLR2_angspd: dc.w 0
  12124. PLR2_xoff: dc.l 0
  12125. PLR2_yoff: dc.l 0
  12126. PLR2_yvel: dc.l 0
  12127. PLR2_zoff: dc.l 0
  12128. PLR2_tyoff: dc.l 0
  12129. PLR2_xspdval: dc.l 0
  12130. PLR2_zspdval: dc.l 0
  12131. PLR2_Zone: dc.w 0
  12132. PLR2_Roompt: dc.l 0
  12133. PLR2_OldRoompt: dc.l 0
  12134. PLR2_PointsToRotatePtr: dc.l 0
  12135. PLR2_ListOfGraphRooms: dc.l 0
  12136. PLR2_oldxoff: dc.l 0
  12137. PLR2_oldzoff: dc.l 0
  12138. PLR2_StoodInTop: dc.b 0
  12139.  even
  12140. PLR2_height: dc.l 0
  12141.  
  12142.  ds.w 4
  12143.  
  12144. PLR2s_cosval: dc.w 0
  12145. PLR2s_sinval: dc.w 0
  12146. PLR2s_angpos: dc.w 0
  12147. PLR2s_angspd: dc.w 0
  12148. PLR2s_xoff: dc.l 0
  12149. PLR2s_yoff: dc.l 0
  12150. PLR2s_yvel: dc.l 0
  12151. PLR2s_zoff: dc.l 0
  12152. PLR2s_tyoff: dc.l 0
  12153. PLR2s_xspdval: dc.l 0
  12154. PLR2s_zspdval: dc.l 0
  12155. PLR2s_Zone: dc.w 0
  12156. PLR2s_Roompt: dc.l 0
  12157. PLR2s_OldRoompt: dc.l 0
  12158. PLR2s_PointsToRotatePtr: dc.l 0
  12159. PLR2s_ListOfGraphRooms: dc.l 0
  12160. PLR2s_oldxoff: dc.l 0
  12161. PLR2s_oldzoff: dc.l 0
  12162. PLR2s_height: dc.l 0
  12163. PLR2s_targheight: dc.l 0
  12164.  
  12165.  ds.w 4
  12166.  
  12167. p2_xoff: dc.l 0
  12168. p2_zoff: dc.l 0
  12169. p2_yoff: dc.l 0
  12170. p2_height: dc.l 0
  12171. p2_angpos: dc.w 0
  12172. p2_bobble: dc.w 0
  12173. p2_clicked: dc.b 0
  12174. p2_spctap: dc.b 0
  12175. p2_ducked: dc.b 0
  12176. p2_gunselected: dc.b 0
  12177. p2_fire: dc.b 0
  12178.  even
  12179. p2_holddown: dc.w 0
  12180.  
  12181. liftanimtab:
  12182.  
  12183. endliftanimtab:
  12184.  
  12185. glassball:
  12186. ; incbin "glassball.inc"
  12187.  
  12188. endglass
  12189. glassballpt: dc.l glassball
  12190.  
  12191. rndtab: ; incbin "randfile"
  12192. endrnd: 
  12193.  
  12194. brightanimtab:
  12195. ; dcb.w 200,20
  12196. ; dc.w 5
  12197. ; dc.w 10,20
  12198. ; dc.w 5
  12199. ; dcb.w 30,20
  12200. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  12201. ; dcb.w 40,0
  12202. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  12203. ; dcb.w 300,0
  12204. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  12205. ; dc.w -1
  12206.  
  12207. Roompt: dc.l 0
  12208. OldRoompt: dc.l 0
  12209.  
  12210. *****************************************************************
  12211.  *
  12212.  include "AB3:source_4000/LevelData2"
  12213.  *
  12214. *****************************************************************
  12215.  
  12216.  
  12217. wallpt: dc.l 0
  12218. floorpt: dc.l 0
  12219.  
  12220. Rotated:
  12221.  ds.l 2*800 
  12222. ObjRotated:
  12223.  ds.l 2*500
  12224.  
  12225. OnScreen:
  12226.  ds.l 2*800 
  12227.  
  12228. startwait: dc.w 0
  12229. endwait: dc.w 0
  12230.  
  12231. ;Faces:
  12232. ; incbin "faces2raw"
  12233.  
  12234. LINKS: dc.l 0
  12235. FLYLINKS: dc.l 0
  12236. *************************************************************
  12237.  
  12238. consttab:
  12239.  incbin "constantfile"
  12240.  
  12241. *******************************************************************
  12242.  
  12243.  
  12244.  
  12245. *********************************
  12246.  
  12247. ; include "ab3:source_4000/loadmod.a"
  12248. ; include "ab3:source_4000/proplayer.a"
  12249.  
  12250.  
  12251. darkentab: 
  12252. ;val SET 0
  12253. ; REPT 256
  12254. ; dc.b val
  12255. ;val SET val+1
  12256. ; ENDR
  12257. ; incbin "darkenfile"
  12258.  
  12259. MIDDLEX: dc.w 0
  12260. RIGHTX: dc.w 192
  12261. FULLSCR: dc.w 0
  12262.  
  12263. SHADINGTABLE: incbin "SHADEFILE" 
  12264.  
  12265. ******************************************
  12266. * Link file !*****************************
  12267. ******************************************
  12268.  
  12269. LINKSPACE:
  12270. ; ds.l 22500
  12271. ; incbin "ab3:includes/test.lnk"
  12272.  
  12273. LINKname:
  12274.  dc.b "ab3:includes/test.lnk",0
  12275.  
  12276. LINKFILE:
  12277.  dc.l LINKSPACE
  12278.  
  12279. ******************************************
  12280.  
  12281.  
  12282. brightentab:
  12283.  incbin "brightenfile"
  12284. WorkSpace:
  12285.  ds.l 8192 
  12286. waterfile:
  12287.  incbin "waterfile"
  12288.  
  12289.  SECTION ffff,CODE_C
  12290.  
  12291. nullspr: dc.l 0
  12292.  
  12293.  cnop 0,8
  12294. ;borders:
  12295. ; incbin "newleftbord"
  12296. ; incbin "newrightbord"
  12297.  
  12298. health: 
  12299. ;incbin "healthstrip"
  12300. Ammunition: 
  12301. ;incbin "ammostrip"
  12302. healthpal: 
  12303. ;incbin "healthpal"
  12304. PanelKeys: 
  12305. ;incbin "greenkey"
  12306. ; incbin "redkey"
  12307. ; incbin "yellowkey"
  12308. ; incbin "bluekey"
  12309.  
  12310. null: ds.w 100
  12311. null2: ds.w 100
  12312. null3: ds.w 100
  12313. null4: ds.w 100
  12314.  
  12315.  
  12316. Blurbfield:
  12317.  
  12318.  dc.w bpl1ptl
  12319. bl1l: dc.w 0
  12320.  dc.w bpl1pth
  12321. bl1h: dc.w 0
  12322.  
  12323.  dc.w diwstart,$2c81
  12324.  dc.w diwstop,$1cc1
  12325.  dc.w ddfstart,$38
  12326.  dc.w ddfstop,$b8
  12327.  dc.w bplcon0,$9201
  12328.  dc.w bplcon1,0
  12329.  dc.w $106,$c40
  12330. blcols:
  12331.  dc.w col0,0
  12332.  dc.w col1,$fff
  12333.  
  12334.  dc.w $108,0
  12335.  dc.w $10a,0
  12336.  
  12337.  dc.w $ffff,$fffe
  12338.  dc.w $ffff,$fffe
  12339.  
  12340. nullline:
  12341.  ds.b 80    
  12342.  
  12343.  include "ab3:source_4000/titlecop.s"
  12344.  
  12345. bigfield:    
  12346.                 ; Start of our copper list.
  12347.  dc.w dmacon,$8020
  12348.  dc.w intreq,$8011
  12349.  dc.w $1fc,$f
  12350.  dc.w diwstart
  12351. winstart: dc.w $2c81
  12352.  dc.w diwstop
  12353. winstop: dc.w $2cc1
  12354.  dc.w ddfstart
  12355. fetchstart: dc.w $38
  12356.  dc.w ddfstop
  12357. fetchstop: dc.w $b8
  12358.  
  12359. bordercols:
  12360.  incbin "borderpal"
  12361.  
  12362.  dc.w spr0ptl
  12363. s0l:
  12364.  dc.w 0
  12365.  dc.w spr0pth
  12366. s0h:
  12367.  dc.w 0
  12368.  dc.w spr1ptl
  12369. s1l:
  12370.  dc.w 0
  12371.  dc.w spr1pth
  12372. s1h:
  12373.  dc.w 0
  12374.  dc.w spr2ptl
  12375. s2l:
  12376.  dc.w 0
  12377.  dc.w spr2pth
  12378. s2h:
  12379.  dc.w 0
  12380.  dc.w spr3ptl
  12381. s3l:
  12382.  dc.w 0
  12383.  dc.w spr3pth
  12384. s3h:
  12385.  dc.w 0
  12386.  dc.w spr4ptl
  12387. s4l:
  12388.  dc.w 0
  12389.  dc.w spr4pth
  12390. s4h:
  12391.  dc.w 0
  12392.  dc.w spr5ptl
  12393. s5l:
  12394.  dc.w 0
  12395.  dc.w spr5pth
  12396. s5h:
  12397.  dc.w 0
  12398.  dc.w spr6ptl
  12399. s6l:
  12400.  dc.w 0
  12401.  dc.w spr6pth
  12402. s6h:
  12403.  dc.w 0
  12404.  dc.w spr7ptl
  12405. s7l:
  12406.  dc.w 0
  12407.  dc.w spr7pth
  12408. s7h:
  12409.  dc.w 0
  12410.  
  12411. ; dc.w $106,$c42
  12412. ; incbin "borderpal"
  12413.  
  12414.  dc.w $106,$c42
  12415.  
  12416.  dc.w bplcon0,$0211
  12417.  dc.w bplcon1
  12418. smoff:
  12419.  dc.w $0
  12420.  
  12421.  dc.w $108
  12422. modulo: dc.w 0
  12423.  dc.w $10a,0
  12424.  
  12425.  dc.w $1001,$ff00
  12426.  dc.w intreq,$11
  12427.  
  12428. PALETTESPACE:
  12429.  dcb.l 528,$1fe0000
  12430.  
  12431.  dc.w $2001,$ff00
  12432.  
  12433.  dc.w bpl1pth
  12434. pl1h
  12435.  dc.w 0
  12436.  
  12437.  dc.w bpl1ptl
  12438. pl1l
  12439.  dc.w 0
  12440.  
  12441.  dc.w bpl2pth
  12442. pl2h
  12443.  dc.w 0
  12444.  
  12445.  dc.w bpl2ptl
  12446. pl2l
  12447.  dc.w 0
  12448.  
  12449.  dc.w bpl3pth
  12450. pl3h
  12451.  dc.w 0
  12452.  
  12453.  dc.w bpl3ptl
  12454. pl3l
  12455.  dc.w 0
  12456.  
  12457.  dc.w bpl4pth
  12458. pl4h
  12459.  dc.w 0
  12460.  
  12461.  dc.w bpl4ptl
  12462. pl4l
  12463.  dc.w 0
  12464.  
  12465.  dc.w bpl5pth
  12466. pl5h
  12467.  dc.w 0
  12468.  
  12469.  dc.w bpl5ptl
  12470. pl5l
  12471.  dc.w 0
  12472.  
  12473.  dc.w bpl6pth
  12474. pl6h
  12475.  dc.w 0
  12476.  
  12477.  dc.w bpl6ptl
  12478. pl6l
  12479.  dc.w 0
  12480.  
  12481.  dc.w bpl7pth
  12482. pl7h
  12483.  dc.w 0
  12484.  
  12485.  dc.w bpl7ptl
  12486. pl7l
  12487.  dc.w 0
  12488.  
  12489.  dc.w bpl8pth
  12490. pl8h
  12491.  dc.w 0
  12492.  
  12493.  dc.w bpl8ptl
  12494. pl8l
  12495.  dc.w 0
  12496.  
  12497.  
  12498. val SET $2c
  12499. SCRMODULOS:
  12500.  REPT 232
  12501.  dc.b val,1,$ff,$fe
  12502.  dc.w $108,0
  12503.  dc.w $10a,0
  12504.  dc.b val,$df,$ff,$fe
  12505. val SET (val+1)&$ff
  12506.  ENDR
  12507.  
  12508.  dc.w $108,0,$10a,0
  12509.  dc.w $2401,$ff00
  12510.  dc.w ddfstop,$c8
  12511.  dc.w bplcon0,$9201
  12512.  dc.w bpl1ptl
  12513. scroll:
  12514.  dc.w 0
  12515.  dc.w bpl1pth
  12516. scrolh:
  12517.  dc.w 0
  12518.  
  12519.  dc.w $106,$c40
  12520.  dc.w $180,0
  12521.  dc.w $182,$f0
  12522. ; dc.w $108,40
  12523. ; dc.w $10a,40
  12524.  
  12525. ; dc.w $80
  12526. ;JUMPBACKH:
  12527. ; dc.w 0
  12528. ; dc.w $82
  12529. ;JUMPBACKL:
  12530. ; dc.w 0
  12531.  
  12532. ; dc.w $8a,0
  12533.  
  12534.  dc.w $ffff,$fffe
  12535.  dc.w $ffff,$fffe
  12536.  
  12537. PALETTEBIT:
  12538.  incbin "256palette"
  12539.  dc.w $ffff,$fffe
  12540.  
  12541. yposcop:
  12542. ; dc.w $2a11,$fffe
  12543. ; dc.w $8a,0
  12544.  
  12545. ; ds.l 104*12
  12546.  
  12547. ;colbars:
  12548. ;val SET $2a
  12549. ; dcb.l 104*80,$1fe0000
  12550. ; dc.w $106,$c42
  12551. ; dc.w $80
  12552. ;pch1:
  12553. ; dc.w 0
  12554. ; dc.w $82
  12555. ;pcl1:
  12556. ; dc.w 0 
  12557. ; dc.w $88,0
  12558. ; dc.w $ffff,$fffe       ; End copper list.
  12559.  
  12560. ; ds.l 104*12
  12561.  
  12562.  
  12563. ;colbars2:
  12564. ;val SET $2a
  12565. ; dcb.l 104*80,$1fe0000
  12566. ; dc.w $106,$c42
  12567. ; dc.w $80
  12568. ;pch2:
  12569. ; dc.w 0
  12570. ; dc.w $82
  12571. ;pcl2:
  12572. ; dc.w 0
  12573. ; dc.w $88,0
  12574. ; dc.w $ffff,$fffe       ; End copper list.
  12575.  
  12576. ; ds.l 104*10
  12577.  
  12578. NullCopper:
  12579.  dc.w $ffff,$fffe
  12580.  
  12581. hitcol: dc.l 0
  12582.  
  12583. old: dc.l 0
  12584.  
  12585.  CNOP 0,64
  12586. SCROLLSCRN: ds.l 20*16
  12587.  
  12588. SCROLLOFFSET: dc.w 0
  12589. SCROLLTIMER: dc.w 100
  12590. SCROLLDIRECTION: dc.w 1
  12591. SCROLLXPOS: dc.w 0
  12592. SCROLLPOINTER: dc.l testscroll
  12593. ENDSCROLL: dc.l endtestscroll
  12594.  
  12595. testscroll:
  12596. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  12597. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12598. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  12599. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  12600.  
  12601. BLANKSCROLL:
  12602.  dc.b "                                                                                "
  12603. endtestscroll: 
  12604.  
  12605. prot5: dc.w 0
  12606. PanelCop:
  12607.  
  12608.  dc.w $80
  12609. och:
  12610.  dc.w 0
  12611.  dc.w $82
  12612. ocl:
  12613.  dc.w 0
  12614.  
  12615. statskip:
  12616.  dc.w $1fe,0
  12617.  dc.w $1fe,0
  12618.  
  12619.  dc.w $10c,0
  12620.  dc.w bplcon0,$1201
  12621.  dc.w bpl1ptl
  12622. n1l:
  12623.  dc.w 0
  12624.  dc.w bpl1pth
  12625. n1h:
  12626.  dc.w 0
  12627.  dc.w $108,-24
  12628. ; incbin "Panelpal"
  12629.  
  12630.  dc.w bpl2pth
  12631. p2h
  12632.  dc.w 0
  12633.  
  12634.  dc.w bpl2ptl
  12635. p2l
  12636.  dc.w 0
  12637.  
  12638.  dc.w bpl3pth
  12639. p3h
  12640.  dc.w 0
  12641.  
  12642.  dc.w bpl3ptl
  12643. p3l
  12644.  dc.w 0
  12645.  
  12646.  dc.w bpl4pth
  12647. p4h
  12648.  dc.w 0
  12649.  dc.w bpl4ptl
  12650. p4l
  12651.  dc.w 0
  12652.  dc.w bpl5pth
  12653. p5h
  12654.  dc.w 0
  12655.  dc.w bpl5ptl
  12656. p5l
  12657.  dc.w 0
  12658.  dc.w bpl6pth
  12659. p6h
  12660.  dc.w 0
  12661.  dc.w bpl6ptl
  12662. p6l
  12663.  dc.w 0
  12664.  dc.w bpl7pth
  12665. p7h
  12666.  dc.w 0
  12667.  dc.w bpl7ptl
  12668. p7l
  12669.  dc.w 0
  12670.  dc.w bpl8pth
  12671. p8h
  12672.  dc.w 0
  12673.  dc.w bpl8ptl
  12674. p8l
  12675.  dc.w 0
  12676.  
  12677.  
  12678.  dc.w ddfstart,$38
  12679.  dc.w ddfstop,$b8
  12680.  dc.w diwstart,$2c81
  12681.  dc.w diwstop,$2cc1
  12682.  
  12683.  dc.w bplcon0
  12684. Panelcon: dc.w $0211
  12685.  dc.w bpl1pth
  12686. p1h
  12687.  dc.w 0
  12688.  
  12689.  dc.w bpl1ptl
  12690. p1l
  12691.  dc.w 0
  12692.  
  12693.  
  12694.  dc.w $108,40*7
  12695.  dc.w $10a,40*7
  12696.  
  12697.  dc.w $ffff,$fffe
  12698.  
  12699.  dc.w $180,$fff
  12700.  
  12701.  
  12702.  dc.w $f801,$ff00
  12703.  dc.w col1,$50
  12704.  dc.w $f901,$ff00
  12705.  dc.w col1,$90
  12706.  dc.w $fa01,$ff00
  12707.  dc.w col1,$f0
  12708.  dc.w $fb01,$ff00
  12709.  dc.w col1,$f0
  12710.  dc.w $fc01,$ff00
  12711.  dc.w col1,$90
  12712.  dc.w $fd01,$ff00
  12713.  dc.w col1,$50
  12714.  
  12715.  dc.w $fe01,$ff00
  12716.  dc.w col1,$fff
  12717.  
  12718.  dc.w $ffdf,$fffe
  12719.  dc.w $a01,$ff00
  12720.  dc.w bplcon0,$201
  12721.  
  12722. ; incbin "faces2cols"
  12723.  dc.w bpl1pth
  12724. f1h
  12725.  dc.w 0
  12726.  
  12727.  dc.w bpl1ptl
  12728. f1l
  12729.  dc.w 0
  12730.  
  12731.  dc.w bpl2pth
  12732. f2h
  12733.  dc.w 0
  12734.  
  12735.  dc.w bpl2ptl
  12736. f2l
  12737.  dc.w 0
  12738.  
  12739.  dc.w bpl3pth
  12740. f3h
  12741.  dc.w 0
  12742.  
  12743.  dc.w bpl3ptl
  12744. f3l
  12745.  dc.w 0
  12746.  
  12747.  dc.w bpl4pth
  12748. f4h
  12749.  dc.w 0
  12750.  dc.w bpl4ptl
  12751. f4l
  12752.  dc.w 0
  12753.  
  12754.  dc.w bpl5pth
  12755. f5h
  12756.  dc.w 0
  12757.  dc.w bpl5ptl
  12758. f5l
  12759.  dc.w 0
  12760.  
  12761.  dc.w $0c01,$ff00
  12762.  dc.w bplcon0,$5201
  12763.   
  12764.  dc.w $ffff,$fffe
  12765.  
  12766.  cnop 0,64
  12767. FacePlace:
  12768. ; ds.l 6*32*5
  12769.  
  12770. TEXTSCRN: dc.l 0
  12771.  
  12772. TEXTCOP:
  12773.  dc.w intreq,$8030
  12774.  
  12775.  dc.w spr0ptl
  12776. txs0l:
  12777.  dc.w 0
  12778.  dc.w spr0pth
  12779. txs0h:
  12780.  dc.w 0
  12781.  dc.w spr1ptl
  12782. txs1l:
  12783.  dc.w 0
  12784.  dc.w spr1pth
  12785. txs1h:
  12786.  dc.w 0
  12787.  dc.w spr2ptl
  12788. txs2l:
  12789.  dc.w 0
  12790.  dc.w spr2pth
  12791. txs2h:
  12792.  dc.w 0
  12793.  dc.w spr3ptl
  12794. txs3l:
  12795.  dc.w 0
  12796.  dc.w spr3pth
  12797. txs3h:
  12798.  dc.w 0
  12799.  dc.w spr4ptl
  12800. txs4l:
  12801.  dc.w 0
  12802.  dc.w spr4pth
  12803. txs4h:
  12804.  dc.w 0
  12805.  dc.w spr5ptl
  12806. txs5l:
  12807.  dc.w 0
  12808.  dc.w spr5pth
  12809. txs5h:
  12810.  dc.w 0
  12811.  dc.w spr6ptl
  12812. txs6l:
  12813.  dc.w 0
  12814.  dc.w spr6pth
  12815. txs6h:
  12816.  dc.w 0
  12817.  dc.w spr7ptl
  12818. txs7l:
  12819.  dc.w 0
  12820.  dc.w spr7pth
  12821. txs7h:
  12822.  dc.w 0
  12823.  
  12824.  
  12825.  dc.w $10c,$0088
  12826.  
  12827.  dc.w $1fc,$f
  12828.  dc.w diwstart,$2c81    ; Top left corner of screen.
  12829.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  12830.  dc.w ddfstart,$38      ; Data fetch start.
  12831.  dc.w ddfstop,$c8       ; Data fetch stop.
  12832.  
  12833.  dc.w bplcon0
  12834. TSCP:
  12835.  dc.w $9201
  12836.  
  12837.  dc.w $106,$c40
  12838.  
  12839.  dc.w $2a01,$ff00
  12840.  
  12841.  dc.w col0,0
  12842.  dc.w col1
  12843. TOPLET:
  12844. TXTCOLL:
  12845.  dc.w 0
  12846.   dc.w col2
  12847. BOTLET:
  12848.  dc.w 0
  12849.  dc.w col3
  12850. ALLTEXT:
  12851.  dc.w $fff
  12852.  dc.w $106,$e40
  12853.  dc.w col3
  12854. ALLTEXTLOW:
  12855.  dc.w $0
  12856.  
  12857.  
  12858.  dc.w bpl1pth
  12859. TSPTh:
  12860.  dc.w 0
  12861.  dc.w bpl1ptl
  12862. TSPTl:
  12863.  dc.w 0
  12864.  
  12865.  dc.w bpl2pth
  12866. TSPTh2:
  12867.  dc.w 0
  12868.  dc.w bpl2ptl
  12869. TSPTl2:
  12870.  dc.w 0
  12871.  
  12872.  
  12873.  dc.w $108,0
  12874.  dc.w $10a,0
  12875.  
  12876.  dc.w $ffff,$fffe
  12877.  
  12878. ********************************************
  12879. * Stuff you don't have to worry about yet. *
  12880. ********************************************
  12881.  
  12882. closeeverything:
  12883.  
  12884. ; jsr mt_end
  12885.  
  12886.  move.l #nullcop,d0
  12887. ; move.l old,d0
  12888.  
  12889.  
  12890. ;charlie  
  12891.  move.l d0,$dff080     ; Restore old copper list.
  12892.  move.w d0,ocl
  12893.  swap d0
  12894.  move.w d0,och
  12895.  
  12896. ; move.l doslib,a6
  12897. ; move.l #4,d1
  12898. ; jsr -198(a6)
  12899.  
  12900. ; move.l doslib,d0
  12901. ; move.l d0,a1
  12902. ; move.l 4.w,a6
  12903. ; jsr CloseLib(a6)
  12904.  
  12905.  move.l #$dff000,a6
  12906.  move.w #$8020,dmacon(a6)
  12907.  move.w #$f,dmacon(a6)
  12908.  
  12909. ; move.l 4.w,a6
  12910. ; lea VBLANKInt,a1
  12911. ; moveq #INTB_COPER,d0
  12912. ; jsr _LVORemIntServer(a6)
  12913.  
  12914. ; IFEQ CD32VER
  12915. ; move.l OLDKINT,$68.w
  12916. ; ENDC
  12917. ; move.w saveinters,d0
  12918. ; or.w #$c000,d0
  12919. ; move.w d0,intena(a6)
  12920.  clr.w $dff0a8
  12921.  clr.w $dff0b8
  12922.  clr.w $dff0c8
  12923.  clr.w $dff0d8
  12924.  
  12925.  
  12926. ; move.l oldview,a1
  12927. ; move.l a1,d0
  12928. ; move.l gfxbase,a6
  12929. ; jsr -$de(a6)
  12930.  
  12931. ; cmp.b #'s',mors
  12932. ; beq.s leaveold
  12933. ; move.w #$f8e,$dff1dc
  12934. ;leaveold:
  12935.  
  12936.  jsr RELEASELEVELMEM
  12937.  jsr RELEASESCRNMEM
  12938.  
  12939.  move.l #0,d0
  12940.  
  12941.  rts
  12942.  
  12943.  
  12944.  
  12945. intbase: dc.l 0
  12946. gfxbase: dc.l 0
  12947. oldview: dc.l 0
  12948.  
  12949. stuff:
  12950.  
  12951.     PRSDL
  12952.     Lea    gfxname(pc),a1    
  12953.     Moveq.l    #0,d0
  12954.     Move.l    $4.w,a6    
  12955.     Jsr    -$228(a6)
  12956.     add.w d1,RVAL1
  12957.     Move.l     d0,gfxbase
  12958.     Move.l    d0,a6                Use As Base Reg
  12959.     Move.l    34(a6),oldview
  12960.     move.l 38(a6),old
  12961.     rts
  12962.  
  12963. gfxname dc.b "graphics.library",0
  12964.  even
  12965. INTUNAME    dc.b    "intuition.library",0
  12966.  
  12967.  even
  12968.  
  12969.  
  12970.  cnop 0,64
  12971.  
  12972. Panel:
  12973.  dc.l 0
  12974.  
  12975. TimerScr: 
  12976. ;ds.b 40*64
  12977.  
  12978. scrntab:
  12979.  ds.b 16
  12980. val SET 32
  12981.  REPT 96
  12982.  dc.b val,val,val
  12983. val SET val+1
  12984.  ENDR
  12985.  ds.b 16
  12986.  
  12987. smallscrntab:
  12988. val SET 32
  12989.  REPT 96
  12990.  dc.b val,val
  12991. val SET val+1
  12992.  ENDR
  12993.  
  12994.  cnop 0,64
  12995. scrn:
  12996.  dc.l 0
  12997. ; incbin "ab3:includes/newborderRAW"
  12998. ; ds.b 80
  12999. scrn2:
  13000.  dc.l 0
  13001.  
  13002. ;flib:
  13003. ; incbin "ab3:includes/newborderRAW"
  13004. ; ds.b 80
  13005. ;flib2:
  13006. ; incbin "ab3:includes/newborderRAW"
  13007. ; ds.b 80
  13008.  
  13009. ; incbin "ab3:includes/newborderRAW"
  13010. ; ds.b 80
  13011.  
  13012. SCRNDRAWPT: dc.l 0
  13013. SCRNSHOWPT: dc.l 0
  13014.  
  13015. ; dcb.l 8,$33333333
  13016. ; dc.l 0
  13017. ; dc.l 0
  13018. ; dcb.l 8,$0f0f0f0f
  13019. ; dc.l 0
  13020. ; dc.l 0
  13021. ;
  13022. ; dcb.l 8,$00ff00ff
  13023. ; dc.l 0
  13024. ; dc.l 0
  13025. ; dcb.l 8,$0000ffff
  13026. ; dc.l 0
  13027. ; dc.l 0
  13028. ; dc.l 0,-1,0,-1,0,-1,0,-1
  13029. ; dc.l 0
  13030. ; dc.l 0
  13031. ; dc.l -1,-1,0,0,-1,-1,0,0
  13032. ; dc.l 0
  13033. ; dc.l 0
  13034. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  13035. ; dc.l 0
  13036. ; dc.l 0
  13037.  
  13038. NumTimes: dc.l 0
  13039. TimeCount: dc.l 0
  13040. oldtime: dc.l 0
  13041. counting: dc.b 0
  13042. oktodisplay: dc.b 0
  13043.  
  13044. INITTIMER:
  13045.  move.l #0,TimeCount
  13046.  move.l #0,NumTimes
  13047.  rts
  13048.  
  13049. STARTCOUNT:
  13050.  move.l d0,-(a7)
  13051.  move.l $dff004,d0
  13052.  and.l #$1ffff,d0
  13053.  move.l d0,oldtime
  13054.  st counting
  13055.  move.l (a7)+,d0
  13056.  rts
  13057.  
  13058. STOPCOUNT:
  13059.  move.l d0,-(a7)
  13060.  move.l $dff004,d0
  13061.  and.l #$1ffff,d0
  13062.  
  13063.  sub.l oldtime,d0
  13064.  cmp.l #-256,d0
  13065.  bge.s okcount
  13066.  add.l #313*256,d0
  13067. okcount:
  13068.  add.l d0,TimeCount
  13069.  addq.l #1,NumTimes
  13070.  clr.b counting
  13071.  move.l (a7)+,d0
  13072.  rts
  13073.  
  13074. STOPCOUNTNOADD:
  13075.  move.l d0,-(a7)
  13076.  move.l $dff004,d0
  13077.  and.l #$1ffff,d0
  13078.  
  13079.  sub.l oldtime,d0
  13080.  cmp.l #-256,d0
  13081.  bge.s okcount2
  13082.  add.l #313*256,d0
  13083. okcount2:
  13084.  add.l d0,TimeCount
  13085.  clr.b counting
  13086.  move.l (a7)+,d0
  13087.  rts
  13088.  
  13089. maxbot: dc.w 0
  13090. tstneg: dc.l 0
  13091.  
  13092. STOPTIMER:
  13093.  st oktodisplay
  13094.  rts
  13095.  
  13096. digits: incbin "numbers.inc"
  13097.  
  13098. COMPACTMAP: ds.l 257
  13099.  
  13100. BIGMAP: ds.l 256*10
  13101.  
  13102.  Section Sounds,CODE_C
  13103.  
  13104. nullcop:
  13105.  dc.w $106,$c40
  13106.  dc.w $180,0 
  13107.  dc.w $100,$0
  13108.  dc.w $ffff,$fffe
  13109.  
  13110. Scream:
  13111. ; incbin "ab3:sounds/Scream"
  13112. ; ds.w 100
  13113. EndScream:
  13114. LowScream:
  13115. ; incbin "ab3:sounds/LowScream"
  13116. ; ds.w 100
  13117. EndLowScream:
  13118. BaddieGun:
  13119. ; incbin "ab3:sounds/BaddieGun"
  13120. EndBaddieGun:
  13121. bass:
  13122. ; incbin "ab3:sounds/backbass+drum"
  13123. bassend:
  13124. Shoot:
  13125. ; incbin "ab3:sounds/fire!"
  13126. EndShoot:
  13127. Munch:
  13128. ; incbin "ab3:sounds/munch"
  13129. EndMunch:
  13130. PooGun:
  13131. ; incbin "ab3:sounds/shoot.dm"
  13132. EndPooGun:
  13133. Collect:
  13134. ; incbin "ab3:sounds/collect"
  13135. EndCollect:
  13136. DoorNoise:
  13137. ; incbin "ab3:sounds/newdoor"
  13138. EndDoorNoise:
  13139. Stomp:
  13140. ; incbin "ab3:sounds/footstep3"
  13141. EndStomp:
  13142. SwitchNoise:
  13143. ; incbin "ab3:sounds/switch"
  13144. EndSwitch:
  13145. Reload:
  13146. ; incbin "ab3:sounds/switch1.SFX"
  13147. EndReload:
  13148.  
  13149. CHEATFRAME:
  13150.  dc.b 26,20,33,27,17,12
  13151. ENDCHEAT:
  13152.  
  13153. NoAmmo:
  13154. ; incbin "ab3:sounds/noammo"
  13155. EndNoAmmo:
  13156. Splotch:
  13157. ; incbin "ab3:sounds/splotch"
  13158. EndSplotch:
  13159. SplatPop:
  13160. ; incbin "ab3:sounds/splatpop"
  13161. EndSplatPop:
  13162. Boom:
  13163. ; incbin "ab3:sounds/boom"
  13164. EndBoom:
  13165. Hiss:
  13166. ; incbin "ab3:sounds/newhiss"
  13167. EndHiss:
  13168. Howl1:
  13169. ; incbin "ab3:sounds/howl1"
  13170. EndHowl1:
  13171. Howl2:
  13172. ; incbin "ab3:sounds/howl2"
  13173. EndHowl2:
  13174. Pant:
  13175. ; incbin "ab3:sounds/pant"
  13176. EndPant:
  13177. Whoosh:
  13178. ; incbin "ab3:sounds/whoosh"
  13179. EndWhoosh:
  13180. ROAR:
  13181. ; incbin "ab3:sounds/bigscream"
  13182. EndROAR
  13183. whoosh:
  13184. ; incbin "ab3:sounds/flame"
  13185. Endwhoosh:
  13186.  SECTION music,code_c
  13187.  
  13188. UseAllChannels: dc.w 0
  13189.  
  13190. mt_init:
  13191.  
  13192.  
  13193.     move.l    mt_data,a0
  13194.     move.l    a0,a1
  13195.     add.l    #$3b8,a1
  13196.     moveq    #$7f,d0
  13197.     moveq    #0,d1
  13198. mt_loop:move.l    d1,d2
  13199.     subq.w    #1,d0
  13200. mt_lop2:move.b    (a1)+,d1
  13201.     cmp.b    d2,d1
  13202.     bgt.s    mt_loop
  13203.     dbf    d0,mt_lop2
  13204.     addq.b    #1,d2
  13205.  
  13206.     lea    mt_samplestarts(pc),a1
  13207.     asl.l    #8,d2
  13208.     asl.l    #2,d2
  13209.     add.l    #$43c,d2
  13210.     add.l    a0,d2
  13211.     move.l    d2,a2
  13212.     moveq    #$1e,d0
  13213. mt_lop3:
  13214.     clr.l    (a2)
  13215.     move.l    a2,(a1)+
  13216.     moveq    #0,d1
  13217.     move.w    42(a0),d1
  13218.     asl.l    #1,d1
  13219.     add.l    d1,a2
  13220.     add.l    #$1e,a0
  13221.     dbf    d0,mt_lop3
  13222.  
  13223.     or.b    #$2,$bfe001
  13224.     move.b    #$6,mt_speed
  13225.     clr.w    $dff0a8
  13226.     clr.w    $dff0b8
  13227.     clr.w    $dff0c8
  13228.     clr.w    $dff0d8
  13229.     clr.b    mt_songpos
  13230.     clr.b    mt_counter
  13231.     clr.w    mt_pattpos
  13232.     rts
  13233.  
  13234. mt_end:    clr.w    $dff0a8
  13235.     clr.w    $dff0b8
  13236.     clr.w    $dff0c8
  13237.     clr.w    $dff0d8
  13238.     move.w    #$f,$dff096
  13239.     rts
  13240.  
  13241. mt_music:
  13242.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  13243.     move.l    mt_data,a0
  13244.     addq.b    #$1,mt_counter
  13245.     move.b    mt_counter,D0
  13246.     cmp.b    mt_speed,D0
  13247.     blt.s    mt_nonew
  13248.     clr.b    mt_counter
  13249.     bra    mt_getnew
  13250.  
  13251. mt_nonew:
  13252.     lea    mt_voice1(pc),a6
  13253.     lea    $dff0a0,a5
  13254.     bsr    mt_checkcom
  13255.     lea    mt_voice2(pc),a6
  13256.     lea    $dff0b0,a5
  13257.     bsr    mt_checkcom
  13258. ;    tst.b UseAllChannels
  13259. ;    beq mt_endr
  13260.      lea    mt_voice3(pc),a6
  13261.     lea    $dff0c0,a5
  13262.     bsr    mt_checkcom
  13263.     lea    mt_voice4(pc),a6
  13264.     lea    $dff0d0,a5
  13265.     bsr    mt_checkcom
  13266.     bra    mt_endr
  13267.  
  13268. mt_arpeggio:
  13269.     moveq    #0,d0
  13270.     move.b    mt_counter,d0
  13271.     divs    #$3,d0
  13272.     swap    d0
  13273.     cmp.w    #$0,d0
  13274.     beq.s    mt_arp2
  13275.     cmp.w    #$2,d0
  13276.     beq.s    mt_arp1
  13277.  
  13278.     moveq    #0,d0
  13279.     move.b    $3(a6),d0
  13280.     lsr.b    #4,d0
  13281.     bra.s    mt_arp3
  13282. mt_arp1:moveq    #0,d0
  13283.     move.b    $3(a6),d0
  13284.     and.b    #$f,d0
  13285.     bra.s    mt_arp3
  13286. mt_arp2:move.w    $10(a6),d2
  13287.     bra.s    mt_arp4
  13288. mt_arp3:asl.w    #1,d0
  13289.     moveq    #0,d1
  13290.     move.w    $10(a6),d1
  13291.     lea    mt_periods(pc),a0
  13292.     moveq    #$24,d7
  13293. mt_arploop:
  13294.     move.w    (a0,d0.w),d2
  13295.     cmp.w    (a0),d1
  13296.     bge.s    mt_arp4
  13297.     addq.l    #2,a0
  13298.     dbf    d7,mt_arploop
  13299.     rts
  13300. mt_arp4:move.w    d2,$6(a5)
  13301.     rts
  13302.  
  13303. mt_getnew:
  13304.     move.l    mt_data,a0
  13305.     move.l    a0,a3
  13306.     move.l    a0,a2
  13307.     add.l    #$c,a3
  13308.     add.l    #$3b8,a2
  13309.     add.l    #$43c,a0
  13310.  
  13311.     moveq    #0,d0
  13312.     move.l    d0,d1
  13313.     move.b    mt_songpos,d0
  13314.     move.b    (a2,d0.w),d1
  13315.     asl.l    #8,d1
  13316.     asl.l    #2,d1
  13317.     add.w    mt_pattpos,d1
  13318.     clr.w    mt_dmacon
  13319.  
  13320.     lea    $dff0a0,a5
  13321.     lea    mt_voice1(pc),a6
  13322.     bsr    mt_playvoice
  13323.     lea    $dff0b0,a5
  13324.     lea    mt_voice2(pc),a6
  13325.     bsr    mt_playvoice
  13326. ;    tst.b UseAllChannels
  13327. ;    beq mt_setdma
  13328.     lea    $dff0c0,a5
  13329.     lea    mt_voice3(pc),a6
  13330.     bsr    mt_playvoice
  13331.     lea    $dff0d0,a5
  13332.     lea    mt_voice4(pc),a6
  13333.     bsr    mt_playvoice
  13334.     bra    mt_setdma
  13335.  
  13336. PROTCALC:
  13337. ;    include "ab3:source_4000/protcalc.s"
  13338.     incbin "ab3:includes/protcalc.bin"
  13339. ENDPROTCALC:
  13340.  
  13341. mt_playvoice:
  13342.     move.l    (a0,d1.l),(a6)
  13343.     addq.l    #4,d1
  13344.     moveq    #0,d2
  13345.     move.b    $2(a6),d2
  13346.     and.b    #$f0,d2
  13347.     lsr.b    #4,d2
  13348.     move.b    (a6),d0
  13349.     and.b    #$f0,d0
  13350.     or.b    d0,d2
  13351.     tst.b    d2
  13352.     beq.s    mt_setregs
  13353.     moveq    #0,d3
  13354.     lea    mt_samplestarts(pc),a1
  13355.     move.l    d2,d4
  13356.     subq.l    #$1,d2
  13357.     asl.l    #2,d2
  13358.     mulu    #$1e,d4
  13359.     move.l    (a1,d2.l),$4(a6)
  13360.     move.w    (a3,d4.l),$8(a6)
  13361.     move.w    $2(a3,d4.l),$12(a6)
  13362.     move.w    $4(a3,d4.l),d3
  13363.     tst.w    d3
  13364.     beq.s    mt_noloop
  13365.     move.l    $4(a6),d2
  13366.     asl.w    #1,d3
  13367.     add.l    d3,d2
  13368.     move.l    d2,$a(a6)
  13369.     move.w    $4(a3,d4.l),d0
  13370.     add.w    $6(a3,d4.l),d0
  13371.     move.w    d0,8(a6)
  13372.     move.w    $6(a3,d4.l),$e(a6)
  13373.     move.w    $12(a6),d0
  13374.     asr.w #2,d0
  13375.     move.w d0,$8(a5)
  13376.     bra.s    mt_setregs
  13377. mt_noloop:
  13378.     move.l    $4(a6),d2
  13379.     add.l    d3,d2
  13380.     move.l    d2,$a(a6)
  13381.     move.w    $6(a3,d4.l),$e(a6)
  13382.     move.w    $12(a6),d0
  13383.     asr.w #2,d0
  13384.     move.w d0,$8(a5)
  13385. mt_setregs:
  13386.     move.w    (a6),d0
  13387.     and.w    #$fff,d0
  13388.     beq    mt_checkcom2
  13389.     move.b    $2(a6),d0
  13390.     and.b    #$F,d0
  13391.     cmp.b    #$3,d0
  13392.     bne.s    mt_setperiod
  13393.     bsr    mt_setmyport
  13394.     bra    mt_checkcom2
  13395. mt_setperiod:
  13396.     move.w    (a6),$10(a6)
  13397.     and.w    #$fff,$10(a6)
  13398.     move.w    $14(a6),d0
  13399.     move.w    d0,$dff096
  13400.     clr.b    $1b(a6)
  13401.  
  13402.     move.l    $4(a6),(a5)
  13403.     move.w    $8(a6),$4(a5)
  13404.     move.w    $10(a6),d0
  13405.     and.w    #$fff,d0
  13406.     move.w    d0,$6(a5)
  13407.     move.w    $14(a6),d0
  13408.     or.w    d0,mt_dmacon
  13409.     bra    mt_checkcom2
  13410.  
  13411. mt_setdma:
  13412.      move.w #250,d0
  13413. mt_wait:
  13414.      add.w #1,testchip
  13415.      dbra d0,mt_wait
  13416.     move.w    mt_dmacon,d0
  13417.     or.w    #$8000,d0
  13418.     and.w #%1111111111110011,d0
  13419.     move.w    d0,$dff096
  13420.     move.w #250,d0
  13421. mt_wait2:
  13422.     add.w #1,testchip
  13423.     dbra    d0,mt_wait2
  13424.     lea    $dff000,a5
  13425.     tst.b UseAllChannels
  13426.     beq.s noall
  13427.     lea    mt_voice4(pc),a6
  13428.     move.l    $a(a6),$d0(a5)
  13429.     move.w    $e(a6),$d4(a5)
  13430.     lea    mt_voice3(pc),a6
  13431.     move.l    $a(a6),$c0(a5)
  13432.     move.w    $e(a6),$c4(a5)
  13433. noall:
  13434.     lea    mt_voice2(pc),a6
  13435.     move.l    $a(a6),$b0(a5)
  13436.     move.w    $e(a6),$b4(a5)
  13437.     lea    mt_voice1(pc),a6
  13438.     move.l    $a(a6),$a0(a5)
  13439.     move.w    $e(a6),$a4(a5)
  13440.  
  13441.     add.w    #$10,mt_pattpos
  13442.     cmp.w    #$400,mt_pattpos
  13443.     bne.s    mt_endr
  13444. mt_nex:    clr.w    mt_pattpos
  13445.     clr.b    mt_break
  13446.     addq.b    #1,mt_songpos
  13447.     and.b    #$7f,mt_songpos
  13448.     move.b    mt_songpos,d1
  13449. ;    cmp.b    mt_data+$3b6,d1
  13450. ;    bne.s    mt_endr
  13451. ;    move.b    mt_data+$3b7,mt_songpos
  13452. mt_endr:tst.b    mt_break
  13453.     bne.s    mt_nex
  13454.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  13455.     rts
  13456.  
  13457. mt_setmyport:
  13458.     move.w    (a6),d2
  13459.     and.w    #$fff,d2
  13460.     move.w    d2,$18(a6)
  13461.     move.w    $10(a6),d0
  13462.     clr.b    $16(a6)
  13463.     cmp.w    d0,d2
  13464.     beq.s    mt_clrport
  13465.     bge.s    mt_rt
  13466.     move.b    #$1,$16(a6)
  13467.     rts
  13468. mt_clrport:
  13469.     clr.w    $18(a6)
  13470. mt_rt:    rts
  13471.  
  13472. CODESTORE: dc.l 0
  13473.  
  13474. mt_myport:
  13475.     move.b    $3(a6),d0
  13476.     beq.s    mt_myslide
  13477.     move.b    d0,$17(a6)
  13478.     clr.b    $3(a6)
  13479. mt_myslide:
  13480.     tst.w    $18(a6)
  13481.     beq.s    mt_rt
  13482.     moveq    #0,d0
  13483.     move.b    $17(a6),d0
  13484.     tst.b    $16(a6)
  13485.     bne.s    mt_mysub
  13486.     add.w    d0,$10(a6)
  13487.     move.w    $18(a6),d0
  13488.     cmp.w    $10(a6),d0
  13489.     bgt.s    mt_myok
  13490.     move.w    $18(a6),$10(a6)
  13491.     clr.w    $18(a6)
  13492. mt_myok:move.w    $10(a6),$6(a5)
  13493.     rts
  13494. mt_mysub:
  13495.     sub.w    d0,$10(a6)
  13496.     move.w    $18(a6),d0
  13497.     cmp.w    $10(a6),d0
  13498.     blt.s    mt_myok
  13499.     move.w    $18(a6),$10(a6)
  13500.     clr.w    $18(a6)
  13501.     move.w    $10(a6),$6(a5)
  13502.     rts
  13503.  
  13504. mt_vib:    move.b    $3(a6),d0
  13505.     beq.s    mt_vi
  13506.     move.b    d0,$1a(a6)
  13507.  
  13508. mt_vi:    move.b    $1b(a6),d0
  13509.     lea    mt_sin(pc),a4
  13510.     lsr.w    #$2,d0
  13511.     and.w    #$1f,d0
  13512.     moveq    #0,d2
  13513.     move.b    (a4,d0.w),d2
  13514.     move.b    $1a(a6),d0
  13515.     and.w    #$f,d0
  13516.     mulu    d0,d2
  13517.     lsr.w    #$6,d2
  13518.     move.w    $10(a6),d0
  13519.     tst.b    $1b(a6)
  13520.     bmi.s    mt_vibmin
  13521.     add.w    d2,d0
  13522.     bra.s    mt_vib2
  13523. mt_vibmin:
  13524.     sub.w    d2,d0
  13525. mt_vib2:move.w    d0,$6(a5)
  13526.     move.b    $1a(a6),d0
  13527.     lsr.w    #$2,d0
  13528.     and.w    #$3c,d0
  13529.     add.b    d0,$1b(a6)
  13530.     rts
  13531.  
  13532. mt_nop:    move.w    $10(a6),$6(a5)
  13533.     rts
  13534.  
  13535.  
  13536. mt_checkcom:
  13537.     move.w    $2(a6),d0
  13538.     and.w    #$fff,d0
  13539.     beq.s    mt_nop
  13540.     move.b    $2(a6),d0
  13541.     and.b    #$f,d0
  13542.     tst.b    d0
  13543.     beq    mt_arpeggio
  13544.     cmp.b    #$1,d0
  13545.     beq.s    mt_portup
  13546.     cmp.b    #$2,d0
  13547.     beq    mt_portdown
  13548.     cmp.b    #$3,d0
  13549.     beq    mt_myport
  13550.     cmp.b    #$4,d0
  13551.     beq    mt_vib
  13552.     move.w    $10(a6),$6(a5)
  13553.     cmp.b    #$a,d0
  13554.     beq.s    mt_volslide
  13555.     rts
  13556.  
  13557. mt_volslide:
  13558.     moveq    #0,d0
  13559.     move.b    $3(a6),d0
  13560.     lsr.b    #4,d0
  13561.     tst.b    d0
  13562.     beq.s    mt_voldown
  13563.     add.w    d0,$12(a6)
  13564.     cmp.w    #$40,$12(a6)
  13565.     bmi.s    mt_vol2
  13566.     move.w    #$40,$12(a6)
  13567. mt_vol2:move.w    $12(a6),d0
  13568.     asr.w #2,d0
  13569.     move.w d0,$8(a5)
  13570.     rts
  13571.  
  13572. mt_voldown:
  13573.     moveq    #0,d0
  13574.     move.b    $3(a6),d0
  13575.     and.b    #$f,d0
  13576.     sub.w    d0,$12(a6)
  13577.     bpl.s    mt_vol3
  13578.     clr.w    $12(a6)
  13579. mt_vol3:move.w    $12(a6),d0
  13580.     asr.w #2,d0
  13581.     move.w d0,$8(a5)
  13582.     rts
  13583.  
  13584. mt_portup:
  13585.     moveq    #0,d0
  13586.     move.b    $3(a6),d0
  13587.     sub.w    d0,$10(a6)
  13588.     move.w    $10(a6),d0
  13589.     and.w    #$fff,d0
  13590.     cmp.w    #$71,d0
  13591.     bpl.s    mt_por2
  13592.     and.w    #$f000,$10(a6)
  13593.     or.w    #$71,$10(a6)
  13594. mt_por2:move.w    $10(a6),d0
  13595.     and.w    #$fff,d0
  13596.     move.w    d0,$6(a5)
  13597.     rts
  13598.  
  13599. mt_portdown:
  13600.     clr.w    d0
  13601.     move.b    $3(a6),d0
  13602.     add.w    d0,$10(a6)
  13603.     move.w    $10(a6),d0
  13604.     and.w    #$fff,d0
  13605.     cmp.w    #$358,d0
  13606.     bmi.s    mt_por3
  13607.     and.w    #$f000,$10(a6)
  13608.     or.w    #$358,$10(a6)
  13609. mt_por3:move.w    $10(a6),d0
  13610.     and.w    #$fff,d0
  13611.     move.w    d0,$6(a5)
  13612.     rts
  13613.  
  13614. mt_checkcom2:
  13615.     move.b    $2(a6),d0
  13616.     and.b    #$f,d0
  13617.     cmp.b    #$e,d0
  13618.     beq.s    mt_setfilt
  13619.     cmp.b    #$d,d0
  13620.     beq.s    mt_pattbreak
  13621.     cmp.b    #$b,d0
  13622.     beq.s    mt_posjmp
  13623.     cmp.b    #$c,d0
  13624.     beq.s    mt_setvol
  13625.     cmp.b    #$f,d0
  13626.     beq.s    mt_setspeed
  13627.     rts
  13628.  
  13629. mt_setfilt:
  13630.     move.b    $3(a6),d0
  13631.     and.b    #$1,d0
  13632.     asl.b    #$1,d0
  13633.     and.b    #$fd,$bfe001
  13634.     or.b    d0,$bfe001
  13635.     rts
  13636. mt_pattbreak:
  13637.     not.b    mt_break
  13638.     rts
  13639. mt_posjmp:
  13640.     st reachedend
  13641.     move.b    $3(a6),d0
  13642.     subq.b    #$1,d0
  13643.     move.b    d0,mt_songpos
  13644.     not.b    mt_break
  13645.     rts
  13646. mt_setvol:
  13647.     cmp.b    #$40,$3(a6)
  13648.     ble.s    mt_vol4
  13649.     move.b    #$40,$3(a6)
  13650. mt_vol4:move.b    $3(a6),d0
  13651.     asr.w #2,d0
  13652.     move.w d0,$8(a5)
  13653.     rts
  13654. mt_setspeed:
  13655.     cmp.b    #$1f,$3(a6)
  13656.     ble.s    mt_sets
  13657.     move.b    #$1f,$3(a6)
  13658. mt_sets:move.b    $3(a6),d0
  13659.     beq.s    mt_rts2
  13660.     move.b    d0,mt_speed
  13661.     clr.b    mt_counter
  13662. mt_rts2:rts
  13663.  
  13664. mt_sin:
  13665.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  13666.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  13667.  
  13668. mt_periods:
  13669.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  13670.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  13671.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  13672.  DC.w $007f,$0078,$0071,$0000,$0000
  13673.  
  13674. reachedend: dc.b 0
  13675. mt_speed:    DC.b    6
  13676. mt_songpos:    DC.b    0
  13677. mt_pattpos:    DC.w    0
  13678. mt_counter:    DC.b    0
  13679.  
  13680. mt_break:    DC.b    0
  13681. mt_dmacon:    DC.w    0
  13682. mt_samplestarts:DS.L    $1f
  13683. mt_voice1:    DS.w    10
  13684.         DC.w    1
  13685.         DS.w    3
  13686. mt_voice2:    DS.w    10
  13687.         DC.w    2
  13688.         DS.w    3
  13689. mt_voice3:    DS.w    10
  13690.         DC.w    4
  13691.         DS.w    3
  13692. mt_voice4:    DS.w    10
  13693.         DC.w    8
  13694.         DS.w    3
  13695.  
  13696. CHEATPTR: dc.l 0
  13697. CHEATNUM: dc.l 0
  13698.  
  13699. testchip: dc.w 0
  13700.  
  13701. ;/* End of File */
  13702. mt_data: dc.l 0
  13703. tstchip: dc.l 0
  13704.  include "SERIAL_NIGHTMARE"
  13705.  
  13706. ingame:
  13707. ; incbin "ab3:includes/ingame"
  13708. gameover: 
  13709. ;incbin "ab3:includes/gameover"
  13710. welldone: incbin "ab3:includes/newwelldone"
  13711.  
  13712.  
  13713.